从不同的类获取子类的实例

时间:2011-12-27 00:30:26

标签: java polymorphism instance subclass slick2d

我正在使用光滑的2D引擎和我自己的实体引擎编写游戏来计算2D侧卷轴的细节

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

实体类包含实体信息。它可以具有一种能力,如动画或声音或动作。所有能力都是名为Ability的抽象类的子类。

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

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

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

执行此操作的代码示例将不胜感激。感谢

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

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