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

Java 類建構子機制與 super 呼叫規則詳解

     編輯:Java 相關知識

核心規則

  1. 子類不繼承父類建構子
  2. 子類建構子首行必須呼叫父類建構子(super(...))或同類其他建構子(this(...))
  3. 若父類只有帶參建構子,子類必須顯式呼叫 super(參數)
  4. 若父類有無參建構子,子類可省略 super(),編譯器自動插入

程式碼示範

class SuperClass {
    private int n;
    SuperClass() { System.out.println("SuperClass()"); }
    SuperClass(int n) { System.out.println("SuperClass(int n):" + n); this.n = n; }
}

class SubClass extends SuperClass {
    private int n;
    SubClass() { /* 隱式 super() */ System.out.println("SubClass()"); }
    SubClass(int n) { super(300); System.out.println("SubClass(int n):" + n); this.n = n; }
}

執行順序驗證

new SubClass(200);
// 輸出:
// SuperClass(int n):300
// SubClass(int n):200

常見錯誤

  • 忘記父類無無參建構子時呼叫 super() → 編譯錯誤
  • 在建構子中呼叫可被重寫的方法 → 子類欄位尚未初始化,導致 NPE 或邏輯錯誤
  • 誤以為 super() 可寫在非首行 → 編譯錯誤

設計建議

  • 父類保留無參建構子或提供明確的建構子鏈
  • 建構子避免複雜邏輯,僅做欄位初始化
  • 不可變物件採用 Builder 模式替代多參建構子
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved