0

我正在使用光滑的 2D 引擎和我自己的实体引擎编写游戏来计算 2D 横向滚动条的细节

我的代码目前的工作方式是这样的:

实体类保存实体信息。它可以有一个能力,比如动画、声音或动作。所有能力都是称为能力的抽象类的子类。

我在 Entity 类中有一个方法,我希望在其中获取特定能力的实例,以便我可以使用它的方法:

 public Ability getAbility(String id) {
    for(Ability abil : ablitites) {
        if(abil.getId().equalsIgnoreCase(id)) {
            return abil;
        }
    }
    return null;
}

然而,这只返回超类的一个特定实例,Ability。我希望从不同的包或类中获取子类的实例。

这样做的代码示例将不胜感激。谢谢

4

2 回答 2

0

我不完全理解你的问题,但我认为你应该看看Casting

我认为你应该像这样使用你的代码:(
当然,我不知道你的设计,所以我猜了一下)

Ability ability = getAbility("moveLeft");
if (ability instanceof MoveAbility)
{
    // Right here, we know it IS a MoveAbility because we checked it with
    // instanceof

    // So, we can cast it to a MoveAbility.
    MoveAbility moveAbility = (MoveAbility) ability;
    moveAbility.execute();
}
于 2011-12-27T00:39:11.707 回答
0

我认为你的代码已经在做你想做的事了。如果您的ablitites集合已经包含、 和对象的实例Animation,那么这就是您的方法将返回的内容。它只是通过引用返回它们。它不能返回超类的实例,因为那是一个抽象类。您应该能够调用其中声明的常用方法,并看到您的方法返回的对象表现为您请求的特定子类的实例。SoundMovementAbility AbilityAbility

于 2011-12-27T00:41:12.813 回答