我目前正在尝试制作一个简单的RPG类游戏。我希望怪物在地图上随机产生。我进行了设置,以便当我想要生成它时将其添加到称为ArrayList
的monsters
中。到完成时,我将有许多不同类型的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();
您可以使用类->扩展解决方案或此接口->实现。无论哪种方式,这都是实现怪物的更好方法的一个非常简单的例子。