我在围绕这种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