2015-06-14 26 views
0

因此,我正在構建一個基於戰錘40k桌面遊戲的基礎程序,作爲我的Comp Sci類的額外功勞。我開始制定規格,然後實施規格。在這個遊戲中,我有一個類陸軍有類單位的ArrayList:如何將不同的內部類添加到ArrayList?

List<Units> unitsList = new ArrayList<Units>();

我已經包含不同的單位類型innerclasses創建的類單位。所以,從這個代碼片段將是:

public class Units 
{ 
    int strength, toughness, attacks, save, wounds; 
    class TroopUnit 
    { 
     public static final int strength = 3; 
     public static final int toughness = 3; 
     public static final int attacks = 1; 
     public static final int save = 5; 

     public int wounds = 1; 
    } 

    class EliteTroopUnit 
    { 
     public static final int strength = 3; 
     public static final int toughness = 3; 
     public static final int attacks = 1; 
     public static final int save = 4; 

     public int wounds = 1; 
    } 

} 

有更多的單位類型,但我認爲你可以得到的想法。我試着加入單位的ArrayList內單位的這些不同innerclasses:

​​

不過,我碰到一個問題,因爲我必須聲明和實例與特定類型的內部類的ArrayList中,以添加內在的類。例如, List<Units.someUnitInnerClass> unitsList = new ArrayList<Units.someUnitInnerClass();

那麼,是否有解決此問題的方法,我可以將任何內部類添加到ArrayList?我是否錯誤地解決了這個問題?如果是這樣,還有什麼其他的選擇?謝謝!

編輯:我本來上市這是「我怎樣不同的子類添加到一個ArrayList,但是這是一個錯誤(由魯迪·克肖校正)

回答

2

在你給的示例代碼,TroopUnitEliteTroopUnit是。 。不是Unit亞型他們inner classes

如果你希望他們的Unit子類,他們需要延長Unit例如;

public class Unit {} 
public class TroopUnit extends Unit {} 

在上面的示例中,TroopUnit擴展了(因此是Unit的子類)。快速瀏覽一下,看起來好像只需將extends Unit添加到內部類聲明的末尾,它應該按照您的意圖進行操作。

我希望這會有所幫助。

參考&延伸閱讀:

所有的
+0

你是完全正確的,我的意思是內部類。讓我解決這個問題。好的,讓我試試這個解決方案 - 謝謝。 – Choonkies

+0

好的,這似乎工作。我必須將內部類更改爲靜態內部類才能將內部類實例化到ArrayList中。例如, 靜態類TroopUnit擴展單位 另外,謝謝! – Choonkies

+0

@OmarPatel - 沒問題,我很高興能幫上忙。如果您的問題已解決,請不要忘記接受答案旁邊的灰色勾號,這對您最有幫助。 –

0

首先,子類應該擴展的類。像這樣:

public class TroopUnit extends Units{} 

所有第二,回答你的標題問題,這無關你的代碼的問題,是你應該得到以上層次比你的對象,要添加到列表中的一類,因爲在Java中對象是所有類的父,那麼你可以實例化你的名單如下:

List<Object> unitsList = new ArrayList<Object>(); 
+0

啊,我完全忘了我可以做到這一點。謝謝你的提示。 – Choonkies

+0

@OmarPatel但是考慮讓你的代碼正確。在代碼中使用正確的繼承條款。 –

相關問題