我在超類的構造函數中有抽象方法調用。我遇到了錯誤「構造函數調用必須是構造函數中的第一個語句」。因爲我需要在調用super的構造函數之前在我的子類中初始化一些狀態。在超類的構造函數中調用抽象方法
我明白,構造函數調用必須先..但它使我有一些問題。
我在我的超類中有一個抽象方法,所有的子類都實現它們。 但是,子類構造函數需要在運行抽象方法之前必須處理的參數。
在我的代碼,我在父類的構造抽象方法,這樣你就會明白課程的問題: 超類做:
- 獲取Info1和使用超(I1,I2)INFO2
- 通過子類
執行抽象方法,但沒想到,父類的構造知道它也需要INFO3和信息4,這是宣佈對線下 超() - 線。
我一直在想辦法讓超類的構造函數必須返回並從之前收集子類中的信息,但是我沒有想到任何東西。
此外,該方法不需要參數,因爲所有子類的抽象方法的參數都不相同。
那些有經驗的人,我該如何解決這個問題?
一些谷歌搜索後,它似乎與此有關: http://webcache.googleusercontent.co...s-constructor/
但仍然是一個新手,所以很難掛到.. 我覺得我可能已經避免了這一切如果我可以在處理完子類構造函數之後使用super(),那就麻煩了。根據要求
代碼:
abstract public class Prylar {
abstract public Integer value();
private String itemName;
private Person owner;
public Prylar(Person thisOwner, String iN){
owner = thisOwner;
itemName = iN;
value = value();
}
public class Smycken extends Prylar{
private int antalStenar;
private boolean guldEllerSilver;
private int value;
public Smycken (Person who, String n, int aS, boolean material){
super(who,n);
antalStenar = aS;
guldEllerSilver = material;
}
public Integer value() {
if (guldEllerSilver){
value = 2000;
}
else{
value= 700;}
value += (500*antalStenar);
return value;
}
}
我只想說,以結束這種感謝大家抽出寶貴時間來閱讀和幫助傢伙。對此,我真的非常感激。希望當別人有類似的問題時,他們會偶然發現這一點。
謝謝你們!
我認爲你需要發佈您的代碼 –
我能想到的2個選項 - 1.不要調用從方法在構造函數內部並明確地調用外部。 2.創建另一個抽象方法,捕獲附加信息並在抽象方法之前調用它。順便說一句,爲什麼你不能改變你的方法的簽名? – aishwarya
我不明白你爲什麼在構造函數中調用value()並忽略結果。我猜猜這是一個錯字,真正的代碼是this.value = value(); ??? – user949300