Kế thừa phân cấp (Hierarchical Inheritance): Nhiều lớp dẫn xuất (derived) kế thừa từ một lớp cơ sở (base) chung. Mỗi lớp con mở rộng chức năng theo hướng riêng.
Sơ đồ
Father (Base)
/ \
/ \
Son Daughter
(Derived) (Derived)
Mã nguồn
using System;
namespace Inheritance {
class Test {
static void Main(string[] args) {
Father f = new Father();
f.Display(); // Display...
Son s = new Son();
s.Display(); // Display... (từ Father)
s.DisplayOne(); // Display One (của Son)
Daughter d = new Daughter();
d.Display(); // Display... (từ Father)
d.DisplayTwo(); // Display Two (của Daughter)
Console.ReadKey();
}
}
// Base class
class Father {
public void Display() {
Console.WriteLine("Display...");
}
}
// Derived class 1
class Son : Father {
public void DisplayOne() {
Console.WriteLine("Display One");
}
}
// Derived class 2
class Daughter : Father {
public void DisplayTwo() {
Console.WriteLine("Display Two");
}
}
}
Kết quả
Display...
Display...
Display One
Display...
Display Two
Đặc điểm
SonvàDaughterđều kế thừaDisplay()từFather.- Mỗi lớp con có phương thức riêng:
DisplayOne(),DisplayTwo(). - Không có quan hệ kế thừa giữa
SonvàDaughter(ngang hàng).
So sánh 3 loại kế thừa
| Loại | Cấu trúc | Ví dụ |
|---|---|---|
| Single | A → B | Animal → Dog |
| Multi-level | A → B → C | Grandfather → Father → Son |
| Hierarchical | A → B, A → C | Father → Son, Father → Daughter |
Lưu ý
- C# không hỗ trợ multiple inheritance (một class kế thừa nhiều base class) — dùng Interface.
- Kế thừa phân cấp phổ biến trong: UI controls (Control → Button, TextBox, Label), Entity framework (BaseEntity → User, Product, Order), Game (Entity → Player, Enemy, NPC).
- Nguyên tắc Liskov Substitution: lớp con phải thay thế được lớp cha mà không làm hỏng chương trình.