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

Java 繼承中 private 方法與多態:父類調用私有方法不會觸發子類覆寫

     編輯:程式設計綜合問答

代碼片段中,Person 類定義 private void print() 並供 public void fun() 內部調用。子類 Student 定義了同名 void print()(包私有)。調用 new Student().fun() 輸出「Person>void print」。

核心原因

  • private 方法不參與多態:編譯期靜態綁定至 Person.print()
  • 子類無法覆寫 private 方法:Student.print() 只是新方法,非覆寫
  • fun() 未被覆寫:調用仍走父類邏輯,this 雖指向子類對象,但私有方法解析看聲明類型

驗證實驗

class Person {
    private void print() { System.out.println("Person"); }
    public void fun() { this.print(); } // 編譯期綁定 Person.print
}
class Student extends Person {
    void print() { System.out.println("Student"); } // 隔離方法
}
new Student().fun(); // 輸出 Person

最佳實踐

  • 需多態時請用 protected 或 public
  • 模板方法模式:父類定義 protected abstract void hook(),子類實現
  • 避免在構造器中調用可覆寫方法(會導致子類字段未初始化)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved