我正在使用光滑的2D引擎和我自己的实体引擎编写游戏来计算2D侧卷轴的细节
我的代码目前的工作方式是这样的:
实体类包含实体信息。它可以具有一种能力,如动画或声音或动作。所有能力都是名为Ability的抽象类的子类。
我在Entity类中有一个方法,我想获得一个特定能力的实例,以便我可以使用它的方法:
public Ability getAbility(String id) {
for(Ability abil : ablitites) {
if(abil.getId().equalsIgnoreCase(id)) {
return abil;
}
}
return null;
}
但是,这只返回超类的一个特定实例,即Ability。我希望从不同的包或类中获取子类的实例。
执行此操作的代码示例将不胜感激。感谢
答案 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
集合已经包含Animation
,Sound
和Movement
个对象的实例,那么这就是您的方法将返回的内容。它只是通过Ability
引用返回它们。它不能返回超类Ability
的实例,因为它是一个抽象类。您应该能够调用Ability
中声明的公共方法,并看到方法返回的对象表现为您请求的特定子类的实例。