我想讓我的頭在java中的動態方法調用,並不能夠理解爲什麼java不讓我調用方法從子類而不是超類的方法。在Java中的動態方法查找
例如: 如果我有2類Test
和Test2
。 Test2的繼承從類測試
的方法someFunction()
在子類覆蓋:
測試類
public class Test {
public Test(){
System.out.println("I am Test class constructor called with no values");
}
public void someFunction(){
System.out.println("I am some function belonging to Test Class");
}
}
和TEST2類:
public class Test2 extends Test{
public Test2(){
System.out.println("Constructor of Test2 with no values");
}
public void somFunction(){
System.out.println("I am someFunction overridden in Test2");
}
}
所以當我試着 實例化測試類以這樣的方式
Test t1 = new Test2();
t1.someFunction(); // this should call Test2.someFunction()
我得到的輸出是:
I am Test class constructor called with no values
Constructor of Test2 with no values
I am some function belonging to Test Class
所以我的問題是: 當我打電話使用object t1
爲什麼它調用該方法屬於方法someFunction()
即使在我用子類初始化對象時,超類代替了子類中的那個。
我一直認爲動態調用用來以這種方式工作,即你初始化對象的類,這個類的方法被稱爲基本重寫的方法,而不是父方法。
Dinesh
要避免這種錯誤,請使用@Override註釋 – leonbloy 2013-05-06 01:19:30