因此,我可能以错误的方式对我的程序进行了强加,但我找不到如何以一种漂亮的方式来做我想做的事情。我也找不到如何在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%正确,但是您应该明白这一点。