interface I { void Do(); }
class A : I { public void Do() => Console.WriteLine("A"); }
I i = new A(); // ✅ 正確:接口變量引用實現類對象
// I i = new I(); // ❌ 編譯錯誤:接口無構造函數
| 關鍵字 | 含義 | 基類要求 | 多態行為 |
|---|---|---|---|
new | 隱藏基類同名成員(方法/屬性) | 無要求 | 靜態綁定,按引用類型調用 |
override | 重寫基類虛方法 | 基類成員標記 virtual/abstract/override | 動態綁定,按對象實際類型調用 |
class Base { public virtual void Say() => Console.WriteLine("Base"); }
class Derived : Base {
public new void Say() => Console.WriteLine("Derived new"); // 隱藏
// public override void Say() => Console.WriteLine("Derived override"); // 重寫
}
Base b = new Derived();
b.Say(); // 輸出 "Base"(new 隱藏,靜態綁定)
((Derived)b).Say(); // 輸出 "Derived new"
若基類方法非 virtual,只能用 new 隱藏,不可 override。