class Base
{
int i = 99;
public void amethod()
{
System.out.println("Base.amethod()");
}
Base()
{
amethod();
}
}
public class Derived extends Base
{
int i = -1;
public static void main(String argv[])
{
Base b = new Derived();
System.out.println(b.i);
b.amethod();
}
public void amethod()
{
System.out.println("Derived.amethod()");
}
}
爲什麼這個代碼打印b.i = 99
而不是b.i = -1
? 謝謝。Java代碼說明
爲什麼Base()構造函數在Derived中調用amethod()?如果你可以解釋 – Kobe 2011-03-13 18:26:07
因爲當你在一個對象上調用一個方法時,它會調用真實類型的對象的方法。所以即使你在Base構造函數中,當你調用amethod()時,它開始在子類中尋找amethod()實現。如果它沒有在那裏找到一個,那麼它會向上移動繼承層次結構,但它總是首先嚐試子節點。 – 2011-03-13 18:29:51
謝謝你,我明白了 – Kobe 2011-03-13 18:32:07