我正在學習java中與繼承有關的一章,我有幾個問題。超類構造函數的哪些參數?
我基本瞭解繼承是如何工作的(重寫方法,信息隱藏,如何在子類中使用超類中的私有字段等),但我只有一個問題,我希望你能幫助我。
當超有非默認的構造函數(S) - 不帶參數,這意味着在子類中我要創建新的構造(也可以是默認的 - 不帶參數),但在第一個語句必須是超類的構造函數調用。
好吧,到目前爲止這麼好。我理解到目前爲止。在子類中,你必須調用超類的構造函數,匹配任何構造函數參數。
但是讓我們檢查下面的代碼:(超類)
public class Vehicle {
private int numOfWheels;
private double avgGallonsPerMile;
public Vehicle(int numOfWheels, double avgGallonsPerMile) {
this.numOfWheels = numOfWheels;
this.avgGallonsPerMile = avgGallonsPerMile;
}
}
而另一子類代碼:
public class Car extends Vehicle{
public Car(double avgGallonsPerMile) {
super(What should i write here?, avgGallonsPerMile);
//force numOfWheels to 4;
}
}
這裏是練習子類:
每個子類 包含一個構造函數接受每加侖里程數作爲參數,並且強制車輪的數量達到適當的值2所述的機動兩輪車和4 汽車。
在子類構造函數中,我不需要numOfWheels字段,因爲無論如何,我會強制它爲4(用於汽車)和2(用於摩托車)。
但是,我仍然需要超類的數據。從哪裏獲得這些數據?調用超類的構造函數時應該作爲第一個參數。
但這仍然不是孤獨的情況。我有很多練習,我不需要在子類構造函數中的某些數據作爲參數,但仍然需要它們在超類構造函數調用中。
在這種情況下我該怎麼辦?
我真的很希望你能理解我,我想說的是什麼。這有點困難。
「我不需要子類中的某些數據」a)克服它或b)從超類中刪除該字段。 –
呃...你在評論中說你會強制輪子數量爲4,你會如何做到這一點?提示:numWheels字段是私人的,因此只能在Vehicle類中進行訪問和修改/設置。換句話說,您需要從Car構造函數中將numWheels的適當值發送給超類構造函數... – Alderath