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

Java super 關鍵字完整解析:調用父類構造器、調用父類方法屬性、隱式超類構造調用機制

     編輯:Java 綜合教學

Java super 關鍵字完整解析:調用父類構造器、調用父類方法屬性、隱式超類構造調用機制

現象觀察:子類構造器自動觸發父類構造器

class Father { 
    Father() { System.out.println("Father 無參構造器"); } 
}
class Son extends Father {
    Son() { /* 無顯式 super() */ }
}
new Son(); // 控制台輸出: "Father 無參構造器"

父類構造器輸出

原因:子類構造器第一行隱式插入 super(),調用父類無參構造器。

隱式 super() 等價代碼

super 兩大核心用法

1. 調用父類構造器:super() / super(args)

  • 必須位於子類構造器第一行
  • 若父類無無參構造器 (已定義有參構造器),子類必須顯式調用 super(args)
  • 若父類有無參構造器,可省略 super() (隱式插入)

錯誤案例:父類只有 Father(String name),子類無顯式 super → 編譯錯誤

父類無無參構造器報錯

兩種解決方案:

  1. 父類補充無參構造器
  2. 子類顯式 super("參數") 匹配父類有參構造器

方案一:父類加無參構造器 方案二:子類顯式 super(args) super 參數匹配機制圖解

2. 調用父類方法/屬性:super.method() / super.field

當子類覆寫父類方法/定義同名屬性時,用 super 訪問被遮蔽的父類版本。

class Father { void show() { System.out.println("Father show"); } }
class Son extends Father {
    @Override void show() { 
        System.out.println("Son show");
        super.show(); // 調用父類版本
    }
}
new Son().show();
// 輸出:
// Son show
// Father show

super 調用父類方法效果

super vs this 對比

關鍵字指向構造器調用方法/屬性訪問
this當前對象this() 調用本類其他構造器this.field / this.method() 訪問當前對象成員
super父類部分super() 調用父類構造器super.field / super.method() 訪問父類被遮蔽成員

構造器鏈鐵律

  1. 構造器第一行必須是 this(...) 或 super(...) (二擇一)
  2. 若無顯式調用,編譯器插入 super()
  3. 構造器鏈最終必須到達 Object()
  4. 父類構造器執行 早於 子類構造器主體代碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved