我在圍繞這種Java繼承的奇怪行爲時感到困難。Java繼承私有和公共秩序
說,我有父類私有方法方法1。然後有一個類孩子延伸父類。 孩子也定義了方法方法1,但它是公開的。請看下面的例子:
public class Main {
public static void main(String[] args) {
Parent p = new Child();
p.method2();
}
}
class Parent{
private void method1() {
System.out.println ("Parent's method1()");
}
public void method2() {
System.out.println ("Parent's method2()");
method1();
}
}
class Child extends Parent {
public void method1() {
System.out.println ("Child's method1()");
}
}
我不明白的是,輸出是低於!
Parent's method2()
Parent's method1()
我知道,因爲方法1在是家長,方法1私人兒童無關與家長的。如果是這樣,那麼當方法2調用方法1,爲什麼家長的方法1被稱爲不兒童的?特別是當實際類型是子。
好像完全沒有線索方法1從方法2被調用。 我是否遺漏了繼承規則?請請幫助!
我無法找到一個很好的鏈接,但你可以看看像[這裏](http://skeletoncoder.blogspot.com/ 2006/09/Java的教程 - 超載 - 是 - compile.html)。基本規則是Java在編譯時選擇重載(靜態綁定)並在運行時重載(動態綁定)。實際的JLS爲什麼你的示例是這樣的[right here](https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12.1)在頂部(在「如果表單是* MethodName *」下),但我不確定JLS在沒有背景的情況下是否有幫助。 – Radiodef
這與'訂單'有什麼關係? – EJP