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

Java 子類呼叫父類方法:super 關鍵字適用範圍與限制

     編輯:程式設計綜合問答

結論

`super` **可用於所有非私有、非靜態的父類成員** (方法、欄位、建構子),**不限於建構子**。

可呼叫範圍

父類成員子類中 super.可否呼叫說明
public 方法✅ 是直接 `super.method()`
protected 方法✅ 是同包或子類可見
default (包私有) 方法✅ 是 (同包)不同包不可見
private 方法❌ 否子類不可見,無法 override 也無法 super 呼叫
static 方法❌ 不建議屬於類別,非實例;`super.staticMethod()` 編譯通過但語意混淆,應用 `ParentClass.staticMethod()`
建構子✅ 僅限子類建構子首行 `super(...)`非建構子中不可呼叫建構子
實例欄位✅ 是`super.field` 存取被遮蔽的父類欄位

程式碼驗證 (default 方法可呼叫)


package com.example;

class Country {
    String name;
    void value() { name = "China"; } // default
}

class City extends Country {
    String name;
    void value() {
        name = "Beijing";
        super.value(); // ✅ 同包可呼叫 default 方法
        System.out.println("City name: " + name);
        System.out.println("Country name: " + super.name);
    }
    public static void main(String[] args) {
        new City().value();
    }
}
// 輸出:
// City name: Beijing
// Country name: China

最佳實踐

  1. **Override 時主動呼叫 `super.method()`** 以復用父類邏輯 (如 `super.onCreate()`)。
  2. **避免在 static 方法/區塊中使用 `super`** (無實例上下文)。
  3. **私有化父類內部實作細節** (`private`),只暴露 `protected` 給子類擴充點。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved