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

Java 核心技術卷一第五章:繼承機制深度解析與實戰筆記

     編輯:Java 綜合教學

Java 繼承機制核心概念

繼承是 Java 面向對象程式設計的基石之一,它允許我們基於現有類別建立新類別,從而復用父類別的方法與欄位,並可在此基礎上擴充新功能。在 Java 中,所有繼承均為公有繼承,意味著父類別的公有與受保護成員保持原有存取層級,私有成員則不可被子類別直接存取——這與 C++ 的私有/保護繼承機制有本質區別。

超類別與子類別的關係

使用 extends 關鍵字即可建立繼承關係。術語上,被繼承的類別稱為超類別、父類別或基類別;新建立的類別稱為子類別、派生類別或孩子類別。子類別可透過 super 關鍵字呼叫父類別被覆寫的方法或建構子。值得注意的是,super 並非物件引用,而是指示編譯器呼叫超類別方法的特殊關鍵字。

class Manager extends Employee {
    private double bonus;
    public double getSalary() {
        return bonus + super.getSalary(); // 必須透過 super 存取父類別私有欄位
    }
    public Manager(double b) {
        super(b); // 顯式呼叫父類別建構子
    }
}

若子類別未顯式呼叫父類別建構子,Java 會自動呼叫父類別的無參數建構子;若父類別無此建構子且子類別未顯式呼叫其他建構子,編譯器將報錯。

方法覆寫與多態

子類別定義與父類別相同簽名(方法名+參數列表)的方法即為覆寫。覆寫方法的回傳型別可以是父類別方法回傳型別的子型別(協變回傳型別),但存取層級不能低於父類別方法。final 修飾的方法不可被覆寫,建議使用 @Override 註解標記覆寫意圖,編譯器將驗證是否真正覆寫了父類別方法。

多態允許父類別引用指向子類別物件,實現「is-a」關係:子類別物件可用於任何需要父類別物件的場合。動態綁定機制確保在執行期根據物件實際型別呼叫適當方法,而非編譯期靜態綁定。

抽象類別與介面

當父類別某些方法需由子類別具體實作時,可宣告為抽象方法,類別也必須宣告為抽象類別。抽象類別不可實例化,但可包含具體欄位與方法。介面則是完全抽象的類別,所有方法隱含為 public abstract,欄位隱含為 public static final。

存取修飾符總結

  • private:僅本類別可見
  • protected:同套件與所有子類別可見
  • public:所有類別可見
  • 無修飾符(預設):同套件可見

Object 類別與核心方法

Object 是所有 Java 類別的始祖。重寫 equals() 時必須遵守自反性、對稱性、傳遞性、一致性與非空性五大契約,並同步重寫 hashCode() 以確保雜湊容器正常運作。toString() 建議回傳 類別名[欄位=值,...] 格式。

泛型集合與自動裝箱/拆箱

ArrayList<E> 提供動態陣列功能,支援泛型與自動擴容。基本型別不可直接作為型別參數,需使用包裝類別(如 Integer)。Java SE 5 引入自動裝箱/拆箱機制,編譯器自動插入 valueOf() 與 xxxValue() 呼叫,簡化程式碼。注意包裝類別快取機制:Integer 快取 -128 至 127 範圍內的物件,直接比較參考時在此範圍內會回傳 true。

可變參數與列舉類別

可變參數(Type... args)本質是陣列語法糖,允許傳入任意數量引數或陣列。列舉類別實質為固定實例的類別,支援 == 比較,繼承自 Enum,提供 values()、ordinal()、compareTo() 等實用方法。

反射機制

反射允許執行期分析類別結構。Class 物件代表執行期型別資訊,可透過 getClass()、Class.forName()、T.class 取得。反射可動態建立實例、存取欄位、呼叫方法,但會繞過編譯期檢查,影響效能與安全性,建議謹慎使用。

繼承設計最佳實務

  1. 將共同操作與欄位置於超類別
  2. 避免使用受保護欄位,破壞封裝性
  3. 確保繼承關係符合「is-a」語義
  4. 僅當所有繼承方法皆有意義時才使用繼承
  5. 覆寫方法不應改變預期行為語義
  6. 優先使用多態而非型別檢查與轉型
  7. 節制使用反射
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved