Доступ к методам подкласса путем ссылки на суперкласс - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть суперкласс под названием «Items» и подкласс под названием «PickUpHealth1». Я создаю массив элементов, похожих на этот код:

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

Подкласс имеет свои собственные методы. Я иду через массив itemsArray и, когда происходит определенное событие, я хочу инициировать методы в подклассе PickUpHealth1. Я знаю, что суперкласс не знает о методах в подклассе, но я не хочу создавать отдельный массив для каждого подкласса, если это возможно. В любом случае я могу ссылаться на методы в подклассе через itemsArray? Поскольку h1 инициализируется как объект PickUpHealth1, я думаю, что должен быть способ сделать это, но я не могу понять это. Есть ли способ? Или я все делаю неправильно? Благодарю.

1 Ответ

0 голосов
/ 06 ноября 2018

Итак PickUpHealth1 extends Item и у вас есть List<Item> items

Как вы заметили, Item s может делать только Item вещи, поэтому вы не можете пытаться использовать 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();
}
...