public class BaseClass {
public BaseClass() { }
public void BaseMethod() { }
}
public class DerivedClass : BaseClass {
public DerivedClass() { }
public void DerivedMethod() { }
}
DerivedClass 繼承 BaseClass 所有非私有成員(欄位、屬性、方法)。私有成員仍存在於記憶體中,但派生類不可直接存取。
派生類實例同時擁有兩種有效型別:自身型別與基類型別。
BaseClass b = new DerivedClass(); 安全,視圖縮小為基類成員。DerivedClass d = (DerivedClass)b; 需確認實例真為派生類,否則拋 InvalidCastException。if (b is DerivedClass d) { ... } 安全轉型。基類定義 virtual 方法,派生類 override 重寫。透過基類引用呼叫,執行期動態分派至派生類實作:
public class Animal {
public virtual void Speak() => Console.WriteLine("動物叫聲");
}
public class Dog : Animal {
public override void Speak() => Console.WriteLine("汪汪");
}
Animal a = new Dog();
a.Speak(); // 輸出「汪汪」—— 多態
派生類建構函式隱含呼叫 base(),可顯式指定基類建構子:
public class Derived : Base {
public Derived(int x) : base(x) { } // 呼叫 Base(int)
}
sealed class:禁止被繼承。abstract class:不可實例化,可含 abstract 成員強制派生類實作。繼承實現「是一種」關係,配合多態實現開放封閉原則。善用 virtual/override、is/as、sealed/abstract 控制繼承層級與行為擴充。