无法在初始化为超类

时间:2018-12-21 05:51:53

标签: java oop inheritance arraylist

我正在通过Java学习面向对象的编程,并且正在编写一个冰箱程序进行练习。在我的程序中,有一个Item类,它带有两个派生类PerishableItem和LeftoverItem。我创建了一个初始化为Item的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 :(得分:2)

Item也应该具有方法getDaysToExpire()才能工作...但是,当您调用它们时,派生类中的正确getDaysToExpire()将被分派。

另一种方法是将items.get(2)转换为PerishableItem,然后调用getDaysToExpire,但这绝对不是一个好的设计。

冰箱中的任何物品都有有效期,所以,我不明白为什么在Item类中也没有这种方法。