子類無法繼承父類的 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()