Java:从扩展子类获取对象的最佳方法

标签 java polymorphism abstract extends

所以,我可能以错误的方式对待我的程序,但我找不到如何以一种漂亮的方式做我想做的事情。我也找不到如何在谷歌中正确搜索这个问题,如果这个问题已经得到解答,我很抱歉。这是我所拥有的:

我有一个抽象类GameWorld,它将扩展到几个不同的游戏世界,例如GameAWorldGameBWorld...我有另一个抽象GameRenderer 类将负责这些世界的渲染,并且还将扩展为 GameARendererGameBRenderer...

我的问题是,当创建GameARenderer时(在另一个类中,而不是GameAWorld),它会收到一个通用的GameWorld(实际上是一个GameAWorld)。我需要从 GameAWorld 获取一个不在 GameWorld 中的对象。因此,我现在在 GameARenderer 中所做的是:

Obj chair = ((GameAWorld)world).getChair();

因为如果我只是简单地执行 world.getA(),而不进行强制转换,GameWorld 将不会有 getA() 方法。

我相信这听起来可能令人困惑,所以我稍后会尝试澄清它,如果没有人理解的话......

如果没有代码可以解决它,请随时对我的架构提出更改建议。

最佳答案

作为一个简短但希望足够好的示例,我会尽力帮助您。

public interface Drawable {
    void draw(Graphics g);
}

public class GameWorld {
    List<GameObject> gameObjects;
    List<GameObject> getGameObjects() {...}
}

public class GameAWorld extends GameWorld {...}

public class GameObject implements Drawable {
    // this could be abstract too. Whatever suits your needs.
    @Override
    public void draw(Graphics g) { ... }
}

//inside a renderer
List<GameObject> gameObjects = gameWorld.getGameObjects();
for (GameObject go : gameObjects)
    go.draw(g);

我就是这么做的。请注意,我很快就把它拍在一起了;它可能不是 100% 正确,但你应该明白这一点。

关于Java:从扩展子类获取对象的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33272338/

相关文章:

c++ - 不相关类型的动态调度解决方案

java - 创建抽象类的对象!=实例化抽象类?

java - java中有抽象变量吗?

java - Cordova应用程序构建失败-配置根项目 'android'错误消息

c++11 - unique_ptr 向上转型作为返回

java - 变量多态性中的初始化

java - 设计 - 不允许的抽象静态方法的替代方案

java - Spring 批量调度程序 : Timer implementation

java - 我如何强制 JGroups 将哪个节点设为协调器?

java - bean 的 Autowiring 问题