2013-04-17 41 views
0

這對我來說很難說出問題,所以讓我解釋一下。獲取給定超類的子類的靜態變量

我有一個抽象類Entity和子類HouseWarehouse。每個子類具有相同的具有不同值的靜態變量。

當我在遊戲中按下某個按鈕時,會創建一個Action,它指定將哪個實體的子類創建並放置在世界中。我想編寫一個通用的方法來使用其子類化的靜態變量向世界放置一些Entity

我有一個類PlaceEntityAction,當鼠標點擊時,適當的實體將被放置,假設條件是正確的。我怎樣才能通過我想要放置到這個動作的類,所以它可以與任何通用的Entity

下面是一些簡單化代碼:

if (mousePressed)) { 
    if (some conditions are true) { 

     int ex = x pos 
     int ey = y pos 


     if (world.player.haveFunds(e.COST_ENERGY, e.COST_MONEY, 
        e.COST_RESOURCE)) { 
      if (world.places[ex][ey] == 0) { 
       world.entities.add(e); 
       world.player.addEnergy(-e.COST_ENERGY); 
      } 
     } 
    } 
} 

所以基本上我怎麼可以得到e是我傳給因爲COST_MONEY行動等無論子類是靜態的,應該由類,而不是訪問一個東西?

我真的很努力地表達我想要的東西。也許有人可以破譯這個或提供一些關於我的問題的其他見解。如果您願意,我可以提供任何其他必要的信息。

編輯:

e是取其子我一個基於ID的系統上以前初始化的實例,但我不喜歡這種方法。

+0

你的例子不是很清楚。例如在你的代碼中* e *是什麼? – Markus

+0

請更清楚,幫助我們理解。 – NINCOMPOOP

+0

您正在尋找[工廠模式](http://en.wikipedia.org/wiki/Factory_method_pattern) –

回答

4

靜態變量在這裏是錯誤的方法,特別是因爲你已經實例化你的實體。

取而代之的是,在父類上創建抽象函數costEnergy(),costMoney()等,並在子類上實現它們(使用正確的值)。

1

靜態變量在Java中不是多態的。一個選項是在實體中聲明抽象方法getCostEnergy,getCostMoney和getCostResource,並讓每個子類重寫這些方法以返回不同的常量。這會適合你的場景嗎?