如何在数组的对象上使用另一个类的方法?

时间:2016-04-29 12:23:29

标签: java arrays

首先,我有两个相关的类: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。

2 个答案:

答案 0 :(得分:2)

由于Enemies扩展Sarz,因此您可以将Sarz转换为Enemies的对象(如果它是有效的。)那么,您可以这样做:

System.out.println(((Enemies)map[row][column]).getEnemyName() + " at " + row + "," + column);

答案 1 :(得分:0)

如果你需要从Sarz对象中调用方法getEnemyName(),而不是将超类强制转换为子类,你应该重新考虑你的对象设计来声明Sarz超类中的方法,让像Enemy这样的子类继承它。