[英]Get static variable of subclass given superclass
這對我來說很難提一個問題,所以請允許我解釋一下。
我有一個抽象類Entity
並且子類House
和Warehouse
。 每個子類具有相同的靜態變量,但具有不同的值。
在我的游戲中按下按鈕時,將創建一個Action
,該Action
指定要創建哪個Entity子類並將其放置在世界中。 我想編寫一個通用方法,使用其子類的靜態變量將某些Entity
放置到世界上。
我有一個PlaceEntityAction
類,當條件正確時,單擊鼠標時將放置適當的實體。 如何將要放置的類傳遞給此Action,以便它可與任何通用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
成為傳遞給Action的子類,因為COST_MONEY等是靜態的,應該由Class而不是對象進行訪問?
我真的很難表達我想要的東西。 也許有人可以對此進行解密或提供有關我的問題的其他見解。 如果需要,我可以提供任何其他必要的信息。
編輯:
e
是我先前基於ID系統初始化的任何子類的實例,但我不喜歡此方法。
在這里,靜態變量是錯誤的方法,尤其是因為您已經實例化了實體。
而是在父類上創建抽象函數costEnergy()
, costMoney()
,然后在子級上實現它們(使用正確的值)。
靜態變量在Java中不是多態的。 一種選擇是在Entity中聲明抽象方法getCostEnergy,getCostMoney和getCostResource,並讓每個子類重寫這些方法以返回不同的常量。 這適合您的情況嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.