这对我来说很难说出一个问题,所以请允许我解释一下。
我有一个抽象类Entity
和子类House
和Warehouse
。每个子类都具有相同的静态变量,具有不同的值。
在我的游戏中按下按钮时,会创建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系统初始化的子类的实例,但我不喜欢这种方法。
答案 0 :(得分:4)
静态变量在这里是错误的方法,特别是因为您已经实例化了您的实体。
相反,在父类上创建抽象函数costEnergy()
,costMoney()
等,并在子类上实现它们(使用正确的值)。
答案 1 :(得分:1)
静态变量在Java中不是多态的。一个选项是在Entity中声明抽象方法getCostEnergy,getCostMoney和getCostResource,并让每个子类重写这些方法以返回不同的常量。这对您的情况有用吗?