Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Ví dụ C# về kế thừa đa cấp (Multi-level Inheritance)

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

  • Son kế 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 + composition thay vì kế thừa sâu cho thiết kế linh hoạt.
  • sealed class không thể được kế thừa — dùng cho leaf class.