簡體   English   中英

Java:從擴展子類獲取對象的最佳方法

[英]Java: Best way to get object from extended sub-class

因此,我可能以錯誤的方式對程序進行了強加,但是我找不到如何以一種漂亮的方式來做我想做的事情。 我也找不到如何在Google中正確搜索的方法,如果此問題已經得到解答,對不起。 這是我所擁有的:

我有一個抽象類GameWorld ,它將被擴展到幾個不同的gameWorlds中,例如GameAWorldGameBWorld ...。我還有另一個抽象類GameRenderer ,它將負責這些世界的渲染,並且還將擴展到GameARendererGameBRenderer .. 。

我的問題是,當創建GameARenderer (在另一個類中,而不是GameAWorld)時,它會收到一個普通的GameWorld(實際上是GameAWorld)。 我需要從游戲世界里,這是不是在游戲世界得到一個對象。 因此,我現在在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%正確,但您應該明白這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM