[英]Java Inheritance issue
在探索scjp問題時,我遇到了這種我覺得奇怪的行為。
我已經聲明了兩個類Item和Bolt,如下所示:
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.我無法理解這是怎么發生的。
obj
是Item
類型的引用,因此第一個20因為Item
的cost
字段的值是20.第二個值是10
因為obj
的運行時類型是Bolt
,因此getCost()
調用Bolt
類的getCost
(因為Bolt
擴展Item
)。
簡而言之,運行時多態性僅適用於實例成員(方法重寫)而不適用於實例字段。
類字段不參與多態性游戲。 方法呢。
因此,當您訪問該字段時,您將轉到基類中定義的字段,因為對象的類型是Item
。 當您調用方法時,您將獲得實際值,因為您使用多態來調用方法。
結論:
字段始終是私有的。 如果要訪問字段寫入方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.