繼承讓子類別復用父類別屬性與方法,建立 is-a(是一種) 關係。本文詳細說明繼承優缺點、構造器初始化順序、protected 存取權限、向上轉型應用,並強調「慎用繼承」的設計原則。
non-private 屬性與方法。class Person {
Person() { System.out.println("Person Constructor"); }
}
class Husband extends Person {
Husband() { System.out.println("Husband Constructor"); }
}
// 輸出:
// Person Constructor
// Husband Constructor
規則:
super()(無參數父構造器)。super(參數) 指定呼叫哪個父構造器,且必為第一行。private。最佳實踐:欄位保持 private,透過 protected getter/setter 控制子類別存取,保留封裝彈性。
Person p = new Husband(); // Husband 是 Person → 安全向上轉型
p.display(); // 呼叫父類別方法,若子類別重寫則動態綁定
「是否必須從子類別向父類別向上轉型?」
繼承是強大但雙面刃的工具。善用 protected、掌握構造器鏈、理解向上轉型代價,並在設計階段嚴格評估 is-a 關係是否真正成立,才能寫出可維護的類別階層。