这是我的代码为什么在这里调用超类方法?
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
如果我是写在Hello
meth
方法,公众和HelloWorld
结果覆盖它WUD被上述一。 meth
从method
调用仍然会调用子类的meth
,即使meth调用在超类中,从词汇上讲! 那么为什么meth
是私人时的不同行为?
_____________Edit_____________
有码过这样的事情
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
就是bein g叫。所以,方法调用不在词汇意义上!即使看起来超类的方法会被调用,其实际的子类的becoz子类实例首先调用method
。 为什么不同meth
私人超级
我同意!但即使控件位于超类中,它仍然是调用镜头的子类对象。这就是为什么该方法不是私有的,子类方法版本会被调用。现在在这种情况下,正如你所说的,私有超类方法甚至不知道是由子类实例存在的。因此,如果子类实例实际上是从超类方法内部调用子类meth(),它就是自然的了。 请澄清我的概念是否错误 – Sarabjeet 2015-02-17 21:09:13