Kế thừa đa cấp (Multi-level Inheritance) xảy ra khi một lớp dẫn xuất (derived) được tạo từ một lớp dẫn xuất khác — tạo thành chuỗi: Base → Derived1 → Derived2 → ....
Ví dụ kinh điển: Ông → Cha → Con.
Mã nguồn
using System;
namespace Demo {
// Lớp cơ sở (Base) - Cấp 1
class Grandfather {
public void Display() {
Console.WriteLine("Ông...");
}
}
// Lớp dẫn xuất cấp 1 - Kế thừa Grandfather
class Father : Grandfather {
public void DisplayOne() {
Console.WriteLine("Cha...");
}
}
// Lớp dẫn xuất cấp 2 - Kế thừa Father (gián tiếp kế thừa Grandfather)
class Son : Father {
public void DisplayTwo() {
Console.WriteLine("Con...");
}
static void Main(string[] args) {
Son s = new Son();
// Truy cập phương thức của tất cả các cấp
s.Display(); // Từ Grandfather
s.DisplayOne(); // Từ Father
s.DisplayTwo(); // Từ Son
Console.Read();
}
}
}
Kết quả
Ông...
Cha...
Con...
Đặc điểm
Sonkế thừa cảDisplay()(từ Grandfather) vàDisplayOne()(từ Father).- C# không hỗ trợ kế thừa đa dạng (multiple inheritance) cho class — chỉ đơn kế thừa (single inheritance). Nhưng đa cấp là OK.
- Có thể override phương thức
virtual/abstractở bất kỳ cấp nào.
Override ví dụ
class Grandfather {
public virtual void Greet() => Console.WriteLine("Ông chào");
}
class Father : Grandfather {
public override void Greet() => Console.WriteLine("Cha chào"); // Override
}
class Son : Father {
public override void Greet() {
base.Greet(); // Gọi phiên bản Father
Console.WriteLine("Con chào");
}
}
Lưu ý
- Hạn chế chiều sâu kế thừa quá lớn ( > 3-4 cấp) — vi phạm nguyên tắc Composition over Inheritance.
- Ưu tiên
interface+compositionthay vì kế thừa sâu cho thiết kế linh hoạt. sealedclass không thể được kế thừa — dùng cho leaf class.