Java 中的超級建構函式
本教程將討論 super 關鍵字以從其子類呼叫父類的變數、函式和建構函式。
以下部分展示瞭如何使用 super() 呼叫子類父級的建構函式。
在 Java 中使用帶有無引數建構函式的 super()
當我們在 Java 中使用繼承的概念時,就會使用 super 關鍵字。
當我們使用關鍵字 extends 繼承一個類時,我們得到被繼承的類:父類或超類,繼承父類的類稱為子類或子類。
我們使用 super() 來呼叫父類的建構函式。儘管如此,假設我們要呼叫預設建構函式或不帶任何父類引數的建構函式。
在這種情況下,我們不需要呼叫 super(),因為它會在建構函式建立時自動呼叫。
為了更好地理解它,讓我們看兩個例子。在下面的第一個示例中,我們有三個類。
在 Vehicle 類中,我們在其無引數建構函式中列印一條訊息。Motorcycle 類使用 extends 關鍵字繼承 Vehicle,使 Vehicle 成為超類,Motorcycle 成為子類。
我們在 Motorcycle 類中列印類似 Vehicle 建構函式的訊息。當我們使用 new 關鍵字建立 Motorcycle 的物件時,會呼叫類的建構函式。
請注意,Vehicle 類的建構函式也稱為 Motorcycle 建構函式。發生這種情況是因為每個無引數和預設建構函式呼叫都附加了一個 super()。
class Vehicle {
Vehicle() {
System.out.println("Vehicle Class Constructor Called");
}
}
class Motorcycle extends Vehicle {
Motorcycle() {
System.out.println("Motorcycle Class Constructor Called");
}
}
class ExampleClass1 {
public static void main(String[] args) {
new Motorcycle();
}
}
輸出:
Vehicle Class Constructor Called
Motorcycle Class Constructor Called
在 Java 中使用帶有引數化建構函式的 super()
與無引數建構函式自動呼叫 super() 不同,引數化建構函式不會呼叫它,我們需要使用引數呼叫它。
在示例中,我們有與上述程式相同的類,但 Vehicle 類的建構函式在該程式中接收一個引數。
現在,如果我們嘗試從 Motorcycle 的建構函式中呼叫 super(),我們會收到錯誤,因為 Vehicle 建構函式需要一個引數。
為了解決這個問題,我們需要在建立物件時在 Motorcycle 的建構函式中傳遞的 super() 中傳遞一個引數。
class Vehicle {
Vehicle(String str) {
System.out.println("Vehicle Class Constructor Called");
}
}
class Motorcycle extends Vehicle {
Motorcycle(String str) {
super(str);
System.out.println("Motorcycle Class Constructor Called");
}
}
class ExampleClass1 {
public static void main(String[] args) {
new Motorcycle("example string");
}
}
輸出:
Vehicle Class Constructor Called
Motorcycle Class Constructor Called
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn