在探索scjp問題時,我遇到了我發現很奇怪的行爲。Java繼承問題
我宣佈兩個類項目和博爾特如下:
class Item {
int cost = 20;
public int getCost() {
return cost;
}
}
class Bolt extends Item {
int cost = 10;
public int getCost() {
return cost;
}
}
,並試圖訪問成本的值的兩倍
public class Test {
public static void main(String[] args) {
Item obj = new Bolt();
System.out.println(obj.cost);
System.out.println(obj.getCost());
}
}
我得到的輸出是20 10 我可以」不明白這是怎麼發生的。
否。@Override僅表示您希望此方法覆蓋另一個方法,並且如果不是這種情況,它應該會產生錯誤。但只要方法具有相同的簽名,第二個就會覆蓋第一個。 Java 5之前不存在註釋。 –
@ netbrain,子類的getCost方法正常工作。我對直接調用obj.cost的結果很好奇。但正如Sanjay所說,這是由於運行時多態性僅適用於方法而不適用於字段。 –