簡體   English   中英

Java繼承問題

[英]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.我無法理解這是怎么發生的。

objItem類型的引用,因此第一個20因為Itemcost字段的值是20.第二個值是10因為obj的運行時類型是Bolt ,因此getCost()調用Bolt類的getCost (因為Bolt擴展Item )。

簡而言之,運行時多態性僅適用於實例成員(方法重寫)而不適用於實例字段。

類字段不參與多態性游戲。 方法呢。

因此,當您訪問該字段時,您將轉到基類中定義的字段,因為對象的類型是Item 當您調用方法時,您將獲得實際值,因為您使用多態來調用方法。

結論:

字段始終是私有的。 如果要訪問字段寫入方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM