通过引用超类访问子类方法

时间:2018-11-06 19:01:23

标签: java subclass superclass

我有一个名为“ Items”的超类和一个名为“ PickUpHealth1”的子类。我创建了类似于以下代码的Items数组:

ArrayList<Items> itemsArray = new ArrayList<Items>();
Items h1 = new PickUpHealth1(x,y);
itemsArray.add(h1);

子类具有自己的方法。我遍历数组itemsArray,当发生某个事件时,我想在子类PickUpHealth1中初始化方法。我知道超类不知道子类中的方法,但我不想尽可能为每个子类创建一个单独的数组。无论如何,我可以通过itemsArray引用子类中的方法吗?由于h1被初始化为PickUpHealth1的对象,所以我认为应该有一种方法可以执行此操作,但是我无法弄清楚。有办法吗?还是我要解决所有问题?谢谢。

1 个答案:

答案 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();
}