Khái niệm
Đa hình là hiện tượng các đối tượng thuộc các lớp khác nhau có thể hiểu cùng 1 thông điệp theo các cách khác nhau.
Tính đa hình có nghĩa là có nhiều dạng, tính đa hình sẽ thể hiện rõ khi xây dựng các lớp kế thừa. Một phương thức được gọi, nó sẽ là phương thức cụ thể nào tùy thuộc vào đối tượng lúc nó thực thi.
- Ví dụ: Mình có lớp Animal, có phương thức Speak()
- Với lớp Dog: Speak() ⇒ In ra “gâu gâu”
- Với lớp Mèo: Speak() ⇒ In ra “meo meo”
Đa hình tĩnh ( Static polymorphism)
- Đa hình tĩnh còn gọi là đa hình tại thời điểm biên dịch (Compile time )
- 2 kĩ thuật để thực hiện đa hình tĩnh:
- Nạp chồng phương thức
- Nạp chồng toán tử
Nạp chồng phương thức
- Thực hiện nạp chồng phương thức bằng cách tạo ra nhiều phương thức cùng tên nhưng khác nhau về kiểu dữ liệu trả về, đối số, số lượng đối số.
- Nạp chồng phương thức có thể thực hiện ở trong cùng một class hoặc ở class con
- Hàm dựng (constructor) cũng có thể bị ghi đè
- Không thể nạp chồng phương thức khi chỉ khác nhau về kiểu dữ liệu trả về
- Ví dụ:
public int Add(int a, int b)
{
return a + b;
}
public double Add(double a, double b, double c)
{
return a + b + c;
}
public decimal Add(decimal a, decimal b, decimal c)
{
return a + b + c;
}
Nạp chồng toán tử (Research)
Đa hình động (Overriding)
- Đa hình động là đa hình lúc thực thi (runtime)
- Triển khai lớp trừu tượng (abstract class) hoặc interface
- Lưu ý:
- Overriding được thực hiện ở lớp con
- Phương thức ghi đè (overriding method) và phương thức cơ sở (base) cần có cùng kiểu giữ liệu trả về và đối số
- Phương thức cơ sở (base method) cần chứa từ khoá virtual