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()");
}
}
class test {
public static void main(String args[])
{
Parent p = new Child();
p.method2();
}
}
我很困惑为什么在调用method1()时在Parent :: method2()中它会调用Parents方法1()而不是Childs方法1?我看到只有当method1()是私有的时才会发生这种情况?有人可以解释我为什么吗? 谢谢你。
答案 0 :(得分:5)
private
个方法,因此您在method1
上指定的Child
未链接。 javac
假设您必须表示父级method1
。将其更改为protected
即可。
答案 1 :(得分:5)
根据范围规则发生这种情况;在Parent
中,method1
的最佳匹配是类本地私有版本。
如果您要在method1
中将public
定义为protected
或Parent
并覆盖Child
中的方法,则会调用method2
改为调用Child
的{{1}}。