[英]How to bypass the Super class constructor parameters
我剛剛開始了解抽象 class。
我從一些編碼測試中看到了這個抽象的 class 問題。 我已經對 object Wagon
的啟動方式感到困惑。
正如Vehicle
摘要 class 中所見,其構造函數僅包含兩個參數 - isSedan
和seats
其中一項要求是創建Wagon
class。但是,如主要內容(由問題提供)所示, Wagon
object 改為使用new Wagon(1000)
啟動,其中缺少isSedan
和 seats 值。
我嘗試編寫我的 wagon class,但是,如果不更改主 class 中的給定上下文,我無法繞過isSedan
和seats
的super
參數。我試圖通過 google 獲取更多信息,但找不到任何答案。
有好心人可以賜教嗎?
abstract class Vehicle {
protected boolean isSedan;
protected String seats;
public Vehicle(boolean isSedan, String seats) {
this.isSedan = isSedan;
this.seats = seats;
}
}
class Wagon extends Vehicle {
public Wagon(boolean isSedan, String seats) {
super(isSedan, seats);
}
// I need to write out both the super params and the mileage params, however this will not work too
// public Wagon(boolean isSedan, String seats, int mileage) {
// super(isSedan, seats);
// this.mileage = mileage;
// }
// public Wagon(int mileage) {
// this.mileage = mileage;
// }
// public int getMileage() {
// return this.mileage;
// }
}
class Main {
public static void main(String args[]) {
// 1000 is the mileage
Wagon w = new Wagon(1000);
}
}
對超級 class super()
的構造函數的調用必須作為子類構造函數的第一行顯式或隱式出現。 也就是說,每次創建子類的實例時,都會實例化其父類 class的 object,以及其父類的父類,依此類推, Object
class。
注意:在子類的構造函數使用關鍵字this()
調用另一個重載構造函數的情況下,調用super()
只需要出現在使用this()
調用的最后一個構造函數中。
在這種情況下,parent class Vehicle
只聲明了一個構造函數,它需要兩個 arguments。這意味着編譯器不會生成無參構造函數。 因此,編譯器將無法向Wagon
class 的構造函數添加隱式調用super()
。
也就是說,需要顯式添加對Vehicle
class 的構造函數的調用,並且您需要按預期准確傳遞兩個 arguments。 沒有辦法繞過它。
沒有什么特定於abstract
類,這就是所謂的構造函數鏈在 Java 中起作用。
但是,子 class的構造函數與它調用的父構造函數采用不同數量的 arguments 並沒有錯。
您可以通過將true
傳遞給 parent 的構造函數來實現僅采用坐數的Wagon
構造函數:
public Wagon(String seats) {
super(true, seats);
}
我猜你遇到的代碼中不小心遺漏了這個構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.