所以,我可能错误地对待了我的程序,但是我找不到如何以一种漂亮的方式做我想做的事情。我也找不到如何正确地在谷歌搜索这个,很抱歉,如果已经回答了这个问题。这就是我所拥有的:
我有一个抽象类 GameWorld ,它将扩展到几个不同的游戏世界,比如 GameAWorld , GameBWorld ...我有另一个摘要class GameRenderer ,负责渲染这些世界,并将扩展为 GameARenderer , GameBRenderer ......
我的问题是,当创建 GameARenderer 时(在另一个类中,而不是GameAWorld),它会收到一个通用的GameWorld(实际上是GameAWorld)。我需要从Game A World获取一个对象,而不是GameWorld。因此,我现在在GameARenderer中所做的是:
Obj chair = ((GameAWorld)world).getChair();
因为如果我只是做world.getA(),没有强制转换,GameWorld就不会有 getA()方法。
我认为这可能听起来令人困惑,所以如果没有人理解,我会在稍后澄清一下......
如果没有代码可以解决,请随意建议我的架构上的更改。
答案 0 :(得分:2)
作为一个简短但充满希望的榜样,我会尽力帮助你。
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%正确但你应该明白这一点。