Trong bài hướng dẫn này, tất cả chúng ta sẽ tìm hiểu và khám phá về đa hình, những loại đa hình khác nhau và cách tiến hành chúng trong Java với sự trợ giúp của những ví dụ .
Tính đa hình là một khái niệm quan trọng của lập trình hướng đối tượng. Nó đơn giản có nghĩa là nhiều hơn một hình thức. Đó là cùng một thực thể (phương thức, toán tử hoặc đối tượng) nhưng sẽ hoạt động khác nhau trong các tình huống khác nhau. Ví dụ:
Toán tử + trong Java được sử dụng để triển khai hai tính năng đơn cử. Khi nó được sử dụng với số ( số nguyên và số thực ), nó sẽ triển khai phép cộng .
int a = 5;
int b = 6;
int sum = a + b; // Output = 11
Và khi tất cả chúng ta sử dụng toán tử + với những chuỗi, nó thực thi nối chuỗi. Ví dụ ,
String firstName = "abc ";
String lastName = "xyz";
name = firstName + lastName; // Output = abc xyz
Tóm Tắt
1. Các kiểu đa hình
Trong Java, đa hình hoàn toàn có thể được chia thành hai kiểu :
- Đa hình lúc runtime
- Đa hình lúc compile-time
2. Đa hình lúc runtime
Trong Java, tính đa hình lúc runtime hoàn toàn có thể đạt được trải qua việc ghi đè phương pháp .
Giả sử cùng một phương pháp được tạo ra trong cả superclass và subclass của nó. Trong trường hợp này, phương pháp sẽ được gọi phụ thuộc vào vào đối tượng người dùng được sử dụng để gọi phương pháp. Ví dụ :
2.1 Ví dụ 1: Ghi đè phượng thức
/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: [email protected]
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/
abstract class Animal {
public abstract void makeSound();
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Bark bark..");
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Meow meow..");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.makeSound();
Cat c1 = new Cat();
c1.makeSound();
}
}
Kết quả :
Bark bark…
Meow-meow...
Để biết cách ghi đè phương pháp hoạt động giải trí, hãy truy vấn Ghi đè phương pháp trong Java .
Trong ví dụ trên, phương pháp makeSound ( ) có những cách tiến hành khác nhau trong hai class khác nhau. Khi tất cả chúng ta chạy chương trình ,
- Biểu thức d1.makeSound() sẽ gọi phương thức của class Dog. Đó là bởi vì d1 là một đối tượng của class Dog.
- Biểu thức c1.makeSound() sẽ gọi phương thức của class Cat . Đó là bởi vì c1 là một đối tượng của class cat.
Phương thức được gọi sẽ được xác lập trong suốt quy trình triển khai chương trình. Do đó, ghi đè phương pháp là một đa hình lúc runtime .
3. Đa hình lúc compiler-time
Đa hình lúc compiler-time hoàn toàn có thể đạt được trải qua việc nạp chồng phương pháp và nạp chồng toán tử trong Java .
4. Nạp chồng phương thức
Trong Java so với một class, tất cả chúng ta hoàn toàn có thể tạo những phương pháp có cùng tên nếu chúng khác nhau về những tham số. Ví dụ :
void func() { ... }
void func(int a) { ... }
float func(double a) { ... }
float func(int a, float b) { ... }
Điều này được gọi là nạp chồng phương pháp trong Java .
Hãy lấy một ví dụ về nạp chồng phương pháp .
4.1 Ví dụ 3: Nạp chồng phương thức
/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: [email protected]
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/
class Demo {
public void displayPattern(){
for(int i = 0; i < 10; i++) {
System.out.print("*");
}
}
public void displayPattern(char symbol) {
for(int i = 0; i < 10; i++) {
System.out.print(symbol);
}
}
}
class Main {
public static void main(String[] args) {
Demo d1 = new Demo();
d1.displayPattern();
System.out.println("\n");
d1.displayPattern('#');
}
}
Kết quả:
**********
##########
Trong chương trình trên, displayPattern() là phương thức bị nạp chồng.
- Nếu chúng ta gọi phương thức mà không truyền bất kỳ đối số nào, một mẫu * sẽ được tạo.
- Nếu chúng ta gọi phương thức bằng cách truyền một ký tự làm đối số, một mẫu ký tự đó được tạo.
Để biết cách ghi đè phương pháp hoạt động giải trí, hãy truy vấn Ghi đè phương pháp trong Java .
4.2 So sánh nạp chồng phương thức với ghi đè phương thức trong Java
- Trong trường hợp ghi đè phương thức, các phương thức nằm trong các class khác nhau. Trong khi đó, với nạp chồng phương thức, các phương thức nằm trong cùng một class.
- Ghi đè phương thức được thực hiện tại lúc runtime trong khi nạp chồng phương thức được thực hiện tại lúc compiler-time.
5. Nạp chồng toán tử
Một số toán tử trong Java hoạt động giải trí khác nhau với những toán hạng khác nhau. Ví dụ :
Toán tử + bị nạp chồng để triển khai phép cộng số cũng như nối chuỗi và những toán tử như và, | và ! bị nạp chồng cho những hoạt động giải trí logic và bitwise .
Hãy xem cách một toán tử bị nạp chồng trong Java như thế nào .
Toán tử + trong Java được sử dụng để thực thi hai công dụng đơn cử. Khi nó được sử dụng với số ( số nguyên và số thực ), nó triển khai phép cộng. Ví dụ :
int a = 5;
int b = 6;
int sum = a + b; // Output = 11
Và khi tất cả chúng ta sử dụng toán tử + với những chuỗi, nó triển khai nối chuỗi. Ví dụ ,
String firstName = "abc ";
String lastName = "xyz";
name = firstName + lastName; // Output = abc xyz
Trong những ngôn từ như C + +, tất cả chúng ta hoàn toàn có thể định nghĩa những toán tử hoạt động giải trí khác nhau cho những toán hạng khác nhau. Tuy nhiên, Java không tương hỗ nạp chồng toán tử do người dùng định nghĩa .
6. Tại sao cần có tính đa hình?
Tính đa hình được cho phép tất cả chúng ta tạo mã đồng nhất. Ví dụ :
Giả sử tất cả chúng ta cần kết xuất một hình tròn trụ và hình vuông vắn. Để làm như vậy, tất cả chúng ta hoàn toàn có thể tạo một class Polygon và thừa kế hai subclass Circle và Square từ nó. Trong trường hợp này, sẽ hài hòa và hợp lý khi tạo một phương pháp có cùng tên render ( ) trong cả hai subclass này thay vì tạo những phương pháp có tên khác nhau .
Trong ví dụ về nạp chồng phương pháp, tất cả chúng ta đã cùng sử dụng một tên phương pháp displayPattern ( ) để hiển thị hai mẫu khác nhau cho thống nhất .
Phương thức print ( ) trong Java cũng là một ví dụ về tính đa hình ( nạp chồng phương pháp ). Cùng một phương pháp được sử dụng để in những giá trị của những kiểu giá trị khác nhau như char, int, String, vv. Chúng ta cũng hoàn toàn có thể sử dụng cùng một phương pháp để in nhiều giá trị cùng một lúc .
7. Biến đa hình
Trong Java, những biến đối tượng người dùng ( biến instance ) biểu lộ hoạt động giải trí của những biến đa hình. Đó là do tại những biến đối tượng người dùng của một class hoàn toàn có thể dùng để chỉ những đối tượng người dùng của class cũng như những đối tượng người dùng của những class con của nó. Ví dụ :
/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: [email protected]
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/
class Animal {
public void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
@Override
public void displayInfo() {
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
// declaration of object variable a1 of the Animal class
Animal a1;
// object creation of the Animal class
a1 = new Animal();
a1.displayInfo();
// object creation of the dog class
a1 = new Dog();
a1.displayInfo();
}
}
Kết quả:
I am an animal.
I am a dog.
Trong ví dụ trên, chúng ta đã tạo một biến đối tượng là a1 của class Animal. Ở đây, a1 là một biến đa hình. Bởi vì:
- Trong câu lệnh a1 = new Animal(), a1 dùng để chỉ đối tượng của class Animal .
- Trong câu lệnh a1 = new Dog(), a1 dùng để chỉ đối tượng của class Dog .
Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!
Source: https://final-blade.com
Category : Kiến thức Internet