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

Java 繼承機制:子類能否繼承父類 private 方法?間接調用才是關鍵

     編輯:程式設計綜合問答

直接回答

子類無法繼承父類的 private 方法。私有方法僅在宣告該類別內部可見,編譯器不會將其納入子類的方法表。

父類自身可用 private 方法

父類的其他 public/protected/package-private 方法可以自由呼叫自已的 private 方法,這屬於類別內部封裝。

間接調用範例

public class Parent {
    public void say() {          // 公開方法,可被繼承
        call();                  // 內部呼叫私有方法
    }
    private void call() {        // 私有方法,子類不可見
        System.out.println("parent private ...");
    }
}

public class Child extends Parent {
    public static void main(String[] args) {
        Child c = new Child();
        c.say();  // 輸出 "parent private ..."
    }
}
  • Child 繼承了 say()。
  • 呼叫 c.say() 時,執行父類 say() 邏輯,進而呼叫 call()。
  • Child 無法直接 呼叫 call()(編譯錯誤)。
  • 若 Child 覆寫 say() 且未呼叫 super.say(),則 call() 不會被執行。

設計啟示

  • 若希望子類可擴展某行為,將方法宣告為 protected 或 public。
  • 若行為屬於父類內部實作細節,保持 private,並提供 protected 模板方法供子類覆寫特定步驟(Template Method Pattern)。
  • private 方法不參與多型,無法被覆寫,若子類定義同名同參方法,屬於方法遮蔽,而非覆寫。

驗證方式

Parent.class.getDeclaredMethods()  // 含 private call()
Child.class.getDeclaredMethods()   // 不含 call()
Child.class.getMethods()           // 含繼承來的公共 say()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved