因此,我可能以错误的方式对我的程序进行了强加,但我找不到如何以一种漂亮的方式来做我想做的事情。我也找不到如何在Google中正确搜索的方法,如果对此已经回答,我们感到抱歉。这是我所拥有的:

我有一个抽象类GameWorld,它将扩展到几个不同的gameWorlds中,例如GameAWorld,GameBWorld...。我还有另一个抽象类GameRenderer,它将负责这些世界的渲染,并且还将扩展到GameARenderer,GameBRenderer。 。

我的问题是,当创建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%正确,但是您应该明白这一点。

10-08 16:13