Khái niệm
Kế thừa cho phép một lớp mới tiếp nhận dữ liệu và hành vi từ lớp đã có, sau đó mở rộng hoặc điều chỉnh theo nhu cầu riêng. Cơ chế này giúp tái sử dụng mã và mô hình hóa quan hệ tổng quát, chuyên biệt.
Ví dụ ghi đè hành vi
class Animal:
def speak(self):
print("Am thanh")
class Dog(Animal):
def speak(self):
print("Gau gau")
dog = Dog()
dog.speak()
class Animal
{
public virtual void Speak()
{
Console.WriteLine("Am thanh");
}
}
class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("Gau gau");
}
}
Animal dog = new Dog();
dog.Speak();
class Animal {
speak() {
console.log("Am thanh");
}
}
class Dog extends Animal {
speak() {
console.log("Gau gau");
}
}
const dog = new Dog();
dog.speak();
#include <iostream>
using namespace std;
class Animal {
public:
virtual void speak() {
cout << "Am thanh" << endl;
}
};
class Dog : public Animal {
public:
void speak() override {
cout << "Gau gau" << endl;
}
};
int main() {
Dog dog;
dog.speak();
return 0;
}
class Animal {
speak(): void {
console.log("Am thanh");
}
}
class Dog extends Animal {
speak(): void {
console.log("Gau gau");
}
}
const dog = new Dog();
dog.speak();
Lưu ý
Kế thừa giúp tái sử dụng mã nhưng không nên lạm dụng. Nếu hai lớp chỉ chia sẻ một vài phương thức chung, composition (tổ hợp) thường linh hoạt hơn kế thừa.
Ghi chú theo ngôn ngữ
Python dùng cú pháp class Child(Parent). Hỗ trợ đa kế thừa: class Child(Parent1, Parent2). Hàm super() gọi phương thức của lớp cha.
C++ hỗ trợ đa kế thừa với cú pháp class Dog : public Animal. Ba chế độ kế thừa: public, protected, private. Kế thừa ảo (virtual) dùng khi có diamond problem.
C# chỉ cho phép kế thừa đơn (một lớp cha) với class Dog : Animal. Có thể implement nhiều interface cùng lúc. base gọi constructor hoặc phương thức của lớp cha.
JavaScript dùng class Dog extends Animal. Phương thức super() phải được gọi trong constructor của lớp con trước khi dùng this. Hỗ trợ kế thừa đơn.
TypeScript kế thừa cú pháp extends của JavaScript và bổ sung kiểm tra kiểu. Lớp con phải gọi super() trong constructor. TypeScript không hỗ trợ đa kế thừa lớp, chỉ đa kế thừa interface.
t phần rất nhỏ hành vi, ghép thành phần hoặc dùng interface có thể phù hợp hơn.
Bình luận