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