首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 繼承機制全解析:is-a 關係、構造器鏈、protected 與向上轉型

     編輯:Java 相關知識

繼承讓子類別復用父類別屬性與方法,建立 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

規則:

  1. 子類別構造器第一行隱式呼叫 super()(無參數父構造器)。
  2. 父類別無無參構造器時,子類別必須顯式 super(參數) 指定呼叫哪個父構造器,且必為第一行。

protected:給子類別的特權通道

  • 對外部類別:同等於 private。
  • 對子類別(跨套件也可)與同套件類別:可見。

最佳實踐:欄位保持 private,透過 protected getter/setter 控制子類別存取,保留封裝彈性。

向上轉型:多態的前置動作

Person p = new Husband();  // Husband 是 Person → 安全向上轉型
p.display();  // 呼叫父類別方法,若子類別重寫則動態綁定
  • 編譯器允許隱式向上轉型(安全)。
  • 代價:子類別特有方法/屬性對父類別引用不可見。

慎用繼承:三大缺陷

  1. 父類別變動強制子類別跟著改(脆弱基底類別問題)。
  2. 破壞封裝:父類別實作細節對子類別透明。
  3. 強耦合:繼承是靜態定義,無法執行期切換。

判斷是否該用繼承

「是否必須從子類別向父類別向上轉型?」

  • 是 → 繼承合適。
  • 否 → 改用組合或介面,降低耦合。

總結

繼承是強大但雙面刃的工具。善用 protected、掌握構造器鏈、理解向上轉型代價,並在設計階段嚴格評估 is-a 關係是否真正成立,才能寫出可維護的類別階層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved