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

Java super 關鍵字深度解析:四大用法、與 this 差異、11 條鐵律

     編輯:Java 相關知識

super 四大核心用法

1. 構造器鏈調用:super() / super(參數)

class Person {
    Person() { System.out.println("Person 無參構造"); }
    Person(String name) { System.out.println("Person 有參: " + name); }
}

class Student extends Person {
    Student() {
        super(); // 必須為構造器第一行
        System.out.println("Student 無參");
    }
    Student(String name) {
        super(name); // 調用父類對應構造器
        System.out.println("Student 有參");
    }
    Student(String name, int age) {
        this(name); // 調用本類其他構造器
        System.out.println("年齡: " + age);
    }
}

鐵律:super() 必須置於構造器第一行;若父類無無參構造,子類必須顯式調用 super(參數)。

2. 訪問被隱藏的父類成員:super.字段 / super.方法()

class Base { String val = "父類"; void show() { System.out.println(val); } }
class Derived extends Base {
    String val = "子類";
    void show() {
        System.out.println(val);        // 子類字段
        System.out.println(super.val);  // 父類字段
        super.show();                   // 父類方法
    }
}

3. 區分 this 與 super 的指向

關鍵字指向典型用途
this當前對象實例區分同名字段、調用本類構造器/方法、傳遞當前對象
super父類對象引用(編譯期解析)訪問被遮蔽成員、調用父類構造器/方法

4. 非靜態內部類中訪問外部類:OuterClass.super.method()

class Outer {
    void greet() { System.out.println("Outer"); }
    class Inner {
        void greet() { System.out.println("Inner"); }
        void callOuter() { Outer.super.greet(); } // 訪問外部類實例方法
    }
}

super 與 this 11 條鐵律總結

  1. super(..) 調用父類構造器,必須在構造器首行
  2. this(..) 調用本類其他構造器,必須在構造器首行
  3. super 訪問父類被隱藏字段/方法
  4. this 代表當前對象,消除歧義
  5. 二者不可同時出現在同一構造器(會導致雙重構造鏈)
  6. 構造器首行若無 this/super,隱式插入 super()
  7. 父類無無參構造時,子類必須顯式 super(參數)
  8. super()/this() 僅能在構造器中使用
  9. 靜態上下文禁用:static 方法/塊/字段初始化不可用
  10. this 本質是指向當前對象的引用;super 是編譯期關鍵字,非引用
  11. 匿名內部類中 super 指向父類實例,OuterClass.super 指向外部類實例

常見編譯錯誤與修正

錯誤代碼原因修正
super(); ...; this(); 同一構造器同時調用 super 和 this 二選一,或通過參數區分調用鏈
static 方法中用 super.method() 靜態上下文無 this/super 改為實例方法,或用 父類名.靜態方法()
子類構造器不寫 super,父類無無參構造 隱式 super() 找不到匹配構造器 顯式寫 super(對應參數)

總結

super 是 繼承體系中的「向上穿透」鑰匙:向上調用構造器、向上訪問被遮蔽成員、向上委派方法實現。配合 this 的「當前對象」語義,構成了 Java 面向對象初始化與調度的雙軸核心。牢記 11 條鐵律,可避開 90% 的繼承相關編譯錯誤與邏輯 Bug。

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