这是我的代码
class Hello{
void method(){
System.out.println("super method");
meth();
}
private void meth(){
System.out.println("sup meth");
}
}
public class HelloWorld extends Hello{
//@Override - would fail as meth is private in Hello
protected void meth(){
System.out.println("sub meth");
}
protected void method(){
super.method();
}
public static void main(String []args){
new HelloWorld().method();
}
}
返回的结果是
super method
sup meth
但为什么 ?不应该打印吗
super method
sub meth
如果我要在
meth
中将Hello
方法写为public,并在HelloWorld
中覆盖它结果将是上述之一。
从
meth
调用method
仍然会调用子类的meth
,即使从甲基苯胺的调用是在超类内部,从词法上讲!那么,为什么
meth
是私有的时候为什么会有不同的行为呢?_____________编辑_____________
如果代码是这样的
class Hello{
void method(){
System.out.println("super method");
meth();
}
protected void meth(){
System.out.println("sup meth");
}
}
public class HelloWorld extends Hello{
//@Override - would fail as meth is private in Hello
protected void meth(){
System.out.println("sub meth");
}
protected void method(){
super.method();
}
public static void main(String []args){
new HelloWorld().method();
}
}
O / P将是
super method
sub meth
因此,即使超类
method
中的Hello
调用了meth
,实际上子类的meth
也被调用了。因此,方法调用不是词汇意义上的!即,即使似乎将调用超类的meth,它的实际子类的becoz子类实例也会首先调用method
。为什么在超类中
meth
私有时情况会有所不同 最佳答案
您不能覆盖编译器告诉您的私有方法。因此,超类唯一知道的meth()是它自己的。
您不能覆盖私有方法,因为它是类内部的,因此它的子类甚至都不知道其父类的私有方法是否存在。