获取给定超类的子类的静态变量

时间:2013-04-17 17:58:52

标签: java static subclass

这对我来说很难说出一个问题,所以请允许我解释一下。

我有一个抽象类Entity和子类HouseWarehouse。每个子类都具有相同的静态变量,具有不同的值。

在我的游戏中按下按钮时,会创建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系统初始化的子类的实例,但我不喜欢这种方法。

2 个答案:

答案 0 :(得分:4)

静态变量在这里是错误的方法,特别是因为您已经实例化了您的实体。

相反,在父类上创建抽象函数costEnergy()costMoney()等,并在子类上实现它们(使用正确的值)。

答案 1 :(得分:1)

静态变量在Java中不是多态的。一个选项是在Entity中声明抽象方法getCostEnergy,getCostMoney和getCostResource,并让每个子类重写这些方法以返回不同的常量。这对您的情况有用吗?