繁体   English   中英

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

[英]Java - get extended class from object containing parent class

我可能用错了术语,所以我很抱歉,我是Java新手。

我正在使用LibGDX框架来开发手机游戏,并试图利用其Stage和Actor类。

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

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

这工作得很好。 问题是当我想从Actor获得Stage来调用我自己的StageExtension方法之一时。 Actor保留对舞台的引用,但仅引用“舞台”,例如Actor类具有吸气剂;

public Stage getStage () {
    return stage;
}

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

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

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

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

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

然后,java将尝试为您将StageExtension someStage强制转换为Stage。 在Actor类中,它将被视为一个舞台,因为这就是所有意图和目的的意义。 这将起作用,因为StageExtension是Stage的子类。 换种方式,您应该显式转换对象

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

现在,Java会做到最好将此对象转换为子类

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM