首先,我有两个相关的类:Enemies.java和Sarz.java。敌人扩展了萨尔兹。
public class Enemies extends Sarz {
它有一个包含一些敌人物品的数组。
enemies[0] = new Enemies("Dragon", 100, 100, "Cave");
enemies[1] = new Enemies("Saturn Fly Trap", 10, 15, "Forest");
在Sarz,我制作了一个Sarz类型的阵列,其中我存储了一些随机生成的敌人。
Enemies e = new Enemies();
e.generateEnemies();
Sarz[][] map = new Sarz[5][5];
while (count < 4){
row = r.nextInt(5);
column = r.nextInt(5);
if (map[row][column] == null){
map[row][column] = e.enemies[r.nextInt(8)];
System.out.println(map[row][column].getName() + " at " + row + "," + column);
count++;
}
}
我的问题是,当我使用println语句进行测试时,它们已被正确存储在随机位置,但我似乎无法得到任何东西来将敌人的名字归还给我。我已经尝试使用Arrays.toString()和Enemies类的getter和setter,但是它们不能在map数组上工作,因为它是Sarz类型。我希望能够使用map [row] [column] .getEnemyName()或至少返回一个字符串而不是Enemies @ 14ae5a5的1,0。
答案 0 :(得分:2)
由于Enemies
扩展Sarz
,因此您可以将Sarz
转换为Enemies
的对象(如果它是有效的。)那么,您可以这样做:
System.out.println(((Enemies)map[row][column]).getEnemyName() + " at " + row + "," + column);
答案 1 :(得分:0)
如果你需要从Sarz对象中调用方法getEnemyName(),而不是将超类强制转换为子类,你应该重新考虑你的对象设计来声明Sarz超类中的方法,让像Enemy这样的子类继承它。