Невозможно вызвать метод производного класса в ArrayList, инициализированный суперклассом - PullRequest
0 голосов
/ 21 декабря 2018

Я изучаю объектно-ориентированное программирование через Java и пишу программу-холодильник для практики.Внутри моей программы есть класс Item с двумя производными классами PerishableItem и LeftoverItem.Я создал ArrayList, инициализированный для элемента, и добавил в ArrayList PerishableItem и LeftoverItem.Проблема заключается в том, что я не могу вызывать методы внутри производных классов, которых нет в классе Item.

ArrayList<Item> itms = new ArrayList<Item>();

itms.add(new Item("apple", 0.45, new Date(1, 1, 2001)));
itms.add(new LeftoverItem("rice", 9.99, new Date(1, 1, 2001), 3));
itms.add(new PerishableItem("yogurt", 4.48, new Date(1, 1, 2001), 5));

System.out.println(itms.get(2).getDaysToExpire()); // error here

getDaysToExpire () - это метод внутри класса PerishableItem, а не в классе Item.Кажется, что компилятор даже не видит метод вообще.Спасибо!

1 Ответ

0 голосов
/ 21 декабря 2018

Item также должен иметь метод getDaysToExpire () для работы ... Но когда вы вызываете их, тогда отправляется правильный getDaysToExpire () в производном классе.

Другим способом является приведение items.get(2) к PerishableItem, а затем вызов getDaysToExpire, но это определенно не очень хороший дизайн.

Любой предмет в холодильнике будет иметьдата истечения срока действия, поэтому я не вижу, почему бы не иметь этот метод также в классе Item.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...