Java:从扩展子类获取对象的最佳方法

时间:2015-10-22 02:15:55

标签: java polymorphism abstract extends

所以,我可能错误地对待了我的程序,但是我找不到如何以一种漂亮的方式做我想做的事情。我也找不到如何正确地在谷歌搜索这个,很抱歉,如果已经回答了这个问题。这就是我所拥有的:

我有一个抽象类 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()方法。

我认为这可能听起来令人困惑,所以如果没有人理解,我会在稍后澄清一下......

如果没有代码可以解决,请随意建议我的架构上的更改。

1 个答案:

答案 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%正确但你应该明白这一点。