2015-02-06 41 views
2

我正在製作一個代表基於tile的遊戲的不同tile類型的枚舉,並且我有一個超類,我希望從中繼承tile的實例。正如我剛發現的,枚舉不能擴展或繼承另一個類!將枚舉類型放在不同的類中

我該如何解決這個問題?我的想法是有可能讓Tile類成爲一個普通的類,然後在另一個類中擁有枚舉。這是可能完成的,還是我需要以另一種方式解決問題?

+0

您提出的解決方案聽起來非常合理。或者,您可以讓不同的瓷磚類型爲類,並且當您需要在不同的瓷磚上具有不同的行爲時,可以使用類似訪問者模式的類。 – 2015-02-06 23:54:31

+0

在這種情況下,您可能更喜歡構圖而不是繼承。 – Andreas 2015-02-07 00:05:23

+0

使得繼承比組合更好的事情是,我認爲它會簡化碰撞檢測,但是,現在你說了,我不完全確定這一點。 – 2015-02-07 00:40:23

回答

0

你可以使用一個類的靜態字段,例如:

class Directions { 
    static int LEFT = 0; 
    static int DOWN = 1; 
    static int RIGHT = 2; 
    static int UP = 3; 
} 
+0

這是一個非常簡單的方法,也是大多數語言枚舉的基礎。例如,C沒有布爾值,所以你可以用同樣的方法來實現它們。 – 2015-02-06 23:54:45

+0

隨時,請務必標記爲答案。 – 2015-02-06 23:58:48

+0

我看不到這是通過枚舉來購買的。它失去了類型安全,不會讓你有用地擴展另一個類,並且似乎無法讓你到達任何地方。 – 2015-02-07 00:03:59

0

你可以在任何枚舉領域。

public enum YourEnum { 
    FIRST(new First()), 
    SECOND(new Other()), 

    private final Tile tile; 

    private YourEnum(int code, Tile t) { 
     this.code = code; 
     this.tile = t; 
    } 

    public Tile getTile() { 
     return tile; 
    } 
} 
+0

我仍然需要Tile類中的靜態類型的瓷磚來使用這個,但是這是正確的嗎? – 2015-02-07 00:20:52

+0

我認爲你可以在任何內部靜態或常規公共類中實現Tile。 – vrudkovsk 2015-02-07 07:02:34