2016-12-03 46 views
0

我正在製作一個遊戲,其中每個級別都有不同的機制,但我希望將所有輸​​入處理,渲染等都保存在一個地方。我的方法是讓所有需要的方法都有一個Level類,然後每個級別都是它自己的類(Intro,BossRoom等),並且覆蓋方法來更改每個需要更改的部分,而不必複製全部Level的內容爲每個類。 我有一個LevelManager類,它將保存對關卡的所有引用,並且我想使用ArrayList來執行此操作。Java中的通用ArrayLists

我試過使用ArrayList<Level>,ArrayList<?>,ArrayList<? extends Level>ArrayList<? instanceof Level>當我聲明和實例化變量。我試過的東西似乎沒有用。有什麼是Java這樣做,或者我應該每個Level作爲一個變量?

對不起,我是新來的SO,不知道更好的方法來說。

+1

發表一些相關的代碼。 – rafid059

+2

撰寫[MCVE] – pvg

+2

「列表」有什麼問題?這會導致什麼問題? –

回答

1

它應該是直的。這是一個小例子。

基類:

public abstract class Level{ 
    .... 
} 

編輯:你可以,如果你認爲它不應該(沒有意義),也不能申報Level類爲抽象(至少有一個方法是抽象的)實例化在你的應用程序。根據你的情況,這很可能。

子類:

public class IntroLevel extends Level{ 
... 
} 

其他子類:

public class LevelOne extends Level{ 
... 
} 

你的級別經理:

public class LevelManager{ 

    private List<Level> levels; 

    // constructor 
    public LevelManager(){ 
    levels = new ArrayList<Level>(); 
    levels.add(new IntroLevel()); 
    levels.add(new LevelOne()); 
    ... 
    } 

} 
+0

我對編程相當陌生,所以請原諒這個新手問題,但'abstract'爲父'Level'類服務的目的是什麼?從我的理解來看,它只是讓你無法實例化它。這是所有的事情還是我錯過了什麼? –

+0

你的理解很好。它可以避免對班級的不良使用,也是澄清班級意圖的一種方式。當一個類是抽象的,你知道這是不夠的可用。 – davidxxx

+0

@WilliamV在這個例子中,沒有。如果任何一個方法聲明爲「abstract」,那麼'class'必須聲明爲'abstract'。 –