這是我的代碼爲什麼在這裏調用超類方法?
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