2012-06-09 88 views
0

我想將一個類擴展爲多個其他類,例如在Java中擴展類

public class Ability extends Character 

由於這個我在我的代碼得到一個錯誤:

隱超構造字符()是不確定的。必須明確地調用另一個構造Defense.java

我的代碼是:

public class Character { 
    int characterID; 
    double characterHealth; 

    public Character(int charID, double charHealth) { 
     characterID = charID; 
     characterHealth = charHealth; 
    } 
} 

public class Defense extends Character { 
    int armorClass; 
    int difficultyClass; 

    public Defense(int newAC, int newDC){ 
     armorClass = newAC; 
     difficultyClass = newDC; 
    } 
} 

我不確定如何調用另一個構造。 如果有人能指出爲什麼以及如何去做。

回答

1

從子類的構造函數:

super(charId, charHealth); 

由於超類沒有默認構造函數,因此必須顯式調用非缺省構造函數。

+0

嗯,看看我會嘗試使用程序可以執行的自動生成的程序部分來做這件事。我給它一個去感謝。 什麼是擴展關鍵字與:在C#中的比較?因爲如果我記得:不需要使用超級方法,或者是:與擴展不一樣? –

+0

@VasaSerafin構造語義是不同的,因爲只要定義一個沒有參數的ctor,就不會自動爲您生成* implicit * default(no-arg)。只要超類中沒有默認的ctor,你就必須明確地調用其中一個 - 這就是Java的方式。 –

+0

所以基本上你說的是超級是在C#中創建的,也只是在程序的後端?有沒有一個混亂的方式來定義超級,因爲目前,由於所有使用的變量,編碼可能會變得很長。 也只是爲了澄清,如果我要序列化Character對象,序列化是否會包含其他類? –

1

我不知道,你會得到的值charIdcharHealth,也許這些是常數,但這裏是你怎麼做:

public Defense(int newAC, int newDC) 
{ 
    super(charId, charHealth); 
    armorClass = newAC; 
    difficultyClass = newDC; 
} 
+0

*「我不知道你會得到值......」 - 可能是通過向子類構造函數添加參數。但是,是的,他有一個設計問題那裏... –

+0

嗯看到我會嘗試使用該程序可以做的自動生成的程序部分。我給它一個去感謝。 –