重载子类方法

时间:2019-01-08 08:07:39

标签: java inheritance overloading

将实例视为超类时,将忽略重载方法

我正在设计一个使用两个抽象类GameEventDynamicGameMechanic的游戏引擎。 DynamicGameMechanic具有方法handleEvent(GameEvent),该方法默认情况下会引发错误警告,说明该机械师未配置为处理该事件。然后,将特定的游戏机制设计为使handleEvent()的特定实例重载GameEvent方法。

因此,城市游戏机械师可以处理例如CityCreateEvent。问题是,这不起作用,并且GameEvents使用的是无法重载的方法,该方法会生成无法识别的游戏事件错误。我究竟做错了什么?我怀疑这与以下事实有关(在下面的代码中),特定的DynamicGameMechanic类实例已被上载到DynamicGameMechanic

任何人都可以解释一下并提出解决方法吗?我有几个解决方法,但是它们不是很漂亮。

//Found in the GameInitEvent class
public JsonObject publish() {
    JsonBuilder builder = new JsonBuilder();
    boolean allPassed = true;

    for (DynamicGameMechanic<?> dyn : getTargets()) {
        JsonObject result = dyn.handleEvent(this);
        if (allPassed && result.get("result").getAsString().equals(SUCCESS)) allPassed = false;
        builder.add(dyn.name(), result);
    }

    builder.add("result", allPassed); 
    return builder.build();
}

//Found in the History GameMechanic
public JsonObject handleEvent(GameEvent event) {
    //TODO revisit this after fleshing out the history class
    System.out.println("Foo");
    return GameEvent.success();
}

public JsonObject handleEvent(GameInitEvent event) {
    //TODO revisit this after fleshing out the history class
    System.out.println("Bar");
    return GameEvent.success();
}

在上面的代码中,打印"Foo"而不是"Bar"。实际上,这会产生UnsupportedOperationException()

0 个答案:

没有答案