Java - 从包含父类的对象获取扩展类

时间:2016-04-11 13:36:00

标签: java class extends

我的术语可能不对,所以我道歉,我是Java新手。

我正在使用LibGDX框架来开发一款手机游戏并尝试使用它的Stage和Actor类。

我创建了自己的类StageExtension,它是Stage类的扩展,因为我已经添加了一些自己的方法。所以我要说我有;

StageExtension stageExt = new StageExtension():
Actor actor = new Actor();
stageExt.addActor(actor);

这完全没问题。问题是当我想从Actor获取Stage以调用我自己的StageExtension方法之一时。 Actor保持对舞台的引用,但仅限于"舞台",例如Actor类有getter;

public Stage getStage () {
    return stage;
}

所以,显然我不太了解Java。当我将Actor添加到舞台时,它会调用Actor中的setStage(),因此StageExtension被成功设置为Actor中的舞台。发生这种情况时,Java会忽略我的扩展类吗?

如何在不复制和修改这些核心类的情况下从Actor调用我的StageExtension实例?

希望这是有道理的,谢谢。

1 个答案:

答案 0 :(得分:1)

你看到的是Casting的一个例子。您已经完成的是使用新类StageExtension的子类Stage。因此,在您的情况下,所有StageExtensions都是阶段,但并非所有阶段都是StageExtensions。在这种情况下,Java可以将StageExtension转换为舞台。所以在你的情况下,如果你这样做

StageExtension somesStage = new StageExtension ();
...
actor.setStage(somesStage)

然后java会尝试将StageExtension someStage转换为舞台。在Actor类中,它将被视为一个舞台,因为它认为它适用于所有意图和目的。这将起作用,因为StageExtension是Stage的子类。换句话说,你应该明确地转换对象

if(actor.getStage() instanceof StageExtension){
    StageExtension myStage = (StageExtension) actor.getStage()
}

现在,Java将把这个对象强制转换为子类