所以,我可能以错误的方式对待我的程序,但我找不到如何以一种漂亮的方式做我想做的事情。我也找不到如何在谷歌中正确搜索这个问题,如果这个问题已经得到解答,我很抱歉。这是我所拥有的:
我有一个抽象类GameWorld,它将扩展到几个不同的游戏世界,例如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% 正确,但你应该明白这一点。
关于Java:从扩展子类获取对象的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33272338/