我的术语可能不对,所以我道歉,我是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实例?
希望这是有道理的,谢谢。
答案 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将把这个对象强制转换为子类