Java™ 教程(使用super關鍵字)

博弈發表於2019-01-19

使用super關鍵字

訪問超類成員

如果你的方法覆蓋了它的一個超類的方法,你可以通過使用關鍵字super來呼叫被重寫的方法,你也可以使用super來引用隱藏欄位(儘管不鼓勵隱藏欄位),慮這個類,Superclass

public class Superclass {

    public void printMethod() {
        System.out.println("Printed in Superclass.");
    }
}

這是一個名為Subclass的子類,它重寫了printMethod()

public class Subclass extends Superclass {

    // overrides printMethod in Superclass
    public void printMethod() {
        super.printMethod();
        System.out.println("Printed in Subclass");
    }
    public static void main(String[] args) {
        Subclass s = new Subclass();
        s.printMethod();    
    }
}

Subclass中,簡單名稱printMethod()引用在Subclass中宣告的名稱,它覆蓋了Superclass中的名稱,因此,要引用從Superclass繼承的printMethod()Subclass必須使用限定名,使用super,編譯和執行Subclass將列印以下內容:

Printed in Superclass.
Printed in Subclass

子類建構函式

以下示例說明如何使用super關鍵字來呼叫超類的建構函式,回想一下Bicycle的例子,MountainBikeBicycle的子類,這是MountainBike(子類)建構函式,它呼叫超類建構函式,然後新增自己的初始化程式碼:

public MountainBike(int startHeight, 
                    int startCadence,
                    int startSpeed,
                    int startGear) {
    super(startCadence, startSpeed, startGear);
    seatHeight = startHeight;
}

呼叫超類建構函式必須是子類建構函式中的第一行。

呼叫超類建構函式的語法是:

super(); 

super(parameter list);

使用super(),可以呼叫超類無引數建構函式,使用super(parameter list),將呼叫具有匹配引數列表的超類建構函式。

注意:如果建構函式沒有顯式呼叫超類建構函式,Java編譯器會自動插入對超類的無引數建構函式的呼叫,如果超類沒有無引數建構函式,則會出現編譯時錯誤,Object確實有這樣的建構函式,因此如果Object是唯一的超類,則沒有問題。

如果子類建構函式顯式或隱式呼叫其超類的建構函式,你可能會認為將呼叫一整個建構函式鏈,一直返回Object的建構函式,事實上,情況就是這樣,它被稱為建構函式鏈,當需要很長的類層次時,你需要意識到這一點。


上一篇:多型性

下一篇:Object作為超類

相關文章