我目前正在尝试制作一个简单的RPG类游戏。我希望怪物在地图上随机产生。我进行了设置,以便当我想要生成它时将其添加到称为ArrayListmonsters中。到完成时,我将有许多不同类型的monsters,每个类都有其自己的类(例如Zombie,Ghost ...),每个类都具有一种绘制怪物的方法,称为draw。我想知道我该怎么做。

Monsters是一个ArrayList<Object>,因此它可以具有不同的类,但不会让我做Monsters.get(i).draw();这真的可能吗,还是我很愚蠢。

最佳答案

您未能将对象ArrayList<Object>投射回Monster

// Monster.get(i)            == Object
// (Monster) Monsters.get(i) == Monster

// cast the list item i from Object to Monster
((Monster) Monsters.get(i)).draw();


更好的解决方案:

interface Monster {
   void draw();
}

// implement draw on each
class Zombie implements Monster {}
class Ghost implements Monster {}

ArrayList<Monster> monsters = new ArrayList<>();
// legal
monsters.add(new Zombie());
monsters.add(new Ghost());

// legal
monsters.get(i).draw();


您可以使用类->扩展解决方案或此接口->实现。无论哪种方式,这都是实现怪物的更好方法的一个非常简单的例子。

07-26 09:42