OOP 2: Kế thừa & Đa hình (Inheritance & Polymorphism)
Quảng cáo • Advertisement
📢 Sponsor Ad
Google AdSense
lesson.content.title
lesson.content.subtitle
🎯 OOP: Cha truyền con nối & Biến hình
Hai tính chất quyền lực nhất giúp code của bạn có thể tái sử dụng (Reusable) và mở rộng (Scalable) vô tận.
1. Kế thừa (Inheritance) - "Con nhà tông không giống lông cũng giống cánh"
Bạn muốn tạo class Meo và Cho. Cả 2 đều biết an(), ngu().
Thay vì copy-paste code 2 lần (Vi phạm nguyên tắc DRY - Don't Repeat Yourself), ta tạo class cha DongVat.
class DongVat {
void an() { print("Măm măm"); }
}
class Cho extends DongVat {
// Tự nhiên có hàm an() mà không cần viết!
void sua() { print("Gâu gâu"); }
}
🎮 Ví dụ Game RPG:
Class Character (Cha) có máu, mana, hàm chay().
Class Warrior (Con) kế thừa Character, thêm hàm chem().
Class Mage (Con) kế thừa Character, thêm hàm banCauLua().
Lưu ý: Java/C# chỉ cho phép đơn kế thừa (1 con 1 cha). Muốn nhiều cha? Dùng Interface.
2. Đa hình (Polymorphism) - "Một tên gọi, vạn hình hài"
Đây là phần khó hiểu nhất nhưng ảo diệu nhất.
Hãy tưởng tượng bạn có 1 cái remote có nút "Kêu".
- Chĩa remote vào con Chó -> Nó sủa "Gâu".
- Chĩa remote vào con Mèo -> Nó kêu "Meo".
- Chĩa remote vào con Vịt -> Nó kêu "Cạp".
Bạn (người bấm remote) không cần biết đó là con gì, chỉ cần biết nó là DongVat thì chắc chắn nó biết keu().
DongVat pet;
pet = new Cho();
pet.keu(); // Gâu gâu
pet = new Meo();
pet.keu(); // Meo meo
3. Overloading vs Overriding (Đừng nhầm!)
| Tiêu chí | Overloading (Nạp chồng) | Overriding (Ghi đè) |
|---|---|---|
| Bối cảnh | Trong CÙNG 1 class. | Giữa class CHA và CON. |
| Tên hàm | Giống nhau. | Giống nhau. |
| Tham số | KHÁC nhau. | Y HỆT nhau. |
| Ví dụ | tinhTong(int a, int b)tinhTong(int a, float b) | Cha: diChuyen() (Đi bộ)Con: diChuyen() (Bay) |
Quảng cáo • Advertisement
📢 Ad Space
Google AdSense