我有一个名为“ Items”的超类和一个名为“ PickUpHealth1”的子类。我创建了类似于以下代码的Items数组:
ArrayList<Items> itemsArray = new ArrayList<Items>();
Items h1 = new PickUpHealth1(x,y);
itemsArray.add(h1);
子类具有自己的方法。我遍历数组itemsArray,当发生某个事件时,我想在子类PickUpHealth1中初始化方法。我知道超类不知道子类中的方法,但我不想尽可能为每个子类创建一个单独的数组。无论如何,我可以通过itemsArray引用子类中的方法吗?由于h1被初始化为PickUpHealth1的对象,所以我认为应该有一种方法可以执行此操作,但是我无法弄清楚。有办法吗?还是我要解决所有问题?谢谢。
答案 0 :(得分:1)
所以PickUpHealth1 extends Item
和您有一个List<Item> items
您已经注意到Item
只能做Item
的事情,所以当您以{{1}的身份访问PickUpHealth1
时就不能尝试使用Item
的方法}进入项目列表。
如果Item
没有任何共同点,则不要从此扩展。
如果它们都是“可用的”,则给他们一个通用的方法。
例如:
abstract class Item {
public abstract void useItem();
}
class PickUpHealth extends Item {
private int healAmount;
public PickUpHealth(int healAmount) {
this.healAmount = healAmount;
}
@Override
public void useItem() {
player.addHealth(healAmount);
}
}
public static void main(String[] args) {
List<Item> items = Arrays.asList(new PickUpHealth(10));
Item item = items.get(0);
item.useItem();
}