Java:从扩展子 class 获取对象的最佳方式

Java: Best way to get object from extended sub-class

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

我有一个抽象 class GameWorld 它将扩展到几个不同的游戏世界,比如 GameAWorld, GameBWorld... 我还有一个抽象class GameRenderer 会负责这些世界的渲染,也会扩展成GameARenderer, GameBRenderer...

我的问题是,当 GameARenderer 创建时(在另一个 class,而不是 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% 正确,但你应该明白这一点。