我正在接受一門Java考試的培訓,並且我遇到了一些我在去年的主題中不瞭解的內容。這裏是代碼Java「詭計」,重新定義了女兒班的成員
class Mother {
int var = 2;
int getVar() {
return var;
}
}
class Daughter extends Mother {
int var = 1;
int getVar() {
return var;
}
public static void main(String[] args) {
Mother m = new Mother();
System.out.println(m.var);
System.out.println(m.getVar());
m = new Daughter();
System.out.println(m.var);
System.out.println(m.getVar());
}
}
問題是「這個程序的輸出是什麼?」。我會去與2 2 1 1,但編譯和運行這段代碼時,我得到2 2 2 1.
任何人都可以解釋我爲什麼?
感謝您的閱讀!
'女兒'延伸'母親'?這很奇怪,因爲實際上它是相反的。 – mbx 2011-05-15 12:57:49
我也有興趣聽到原因。我在Eclipse中運行它,並用調試器檢查了值,調試器實際上在m = new Daugher()-line後面顯示了具有兩個不同var成員的本地m變量。 m.var似乎解析爲母親中的一個(也許是因爲局部變量被聲明爲Mother,不知道?),並且m.getVar()調用Daughter中的getVar(如預期的那樣)。 – esaj 2011-05-15 12:58:21
請注意,在真正的程序中,這不會發生,因爲通常你會使'var'變成私人的。如果你想讓課堂以外的課程可以訪問,這應該是非常罕見的,那麼你應該確保變量不會互相隱藏。 – starblue 2011-05-15 14:26:52