我正在通过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类中的方法。似乎编译器甚至根本看不到该方法。谢谢!
答案 0 :(得分:2)
Item
也应该具有方法getDaysToExpire
()才能工作...但是,当您调用它们时,派生类中的正确getDaysToExpire
()将被分派。
另一种方法是将items.get(2)
转换为PerishableItem
,然后调用getDaysToExpire
,但这绝对不是一个好的设计。
冰箱中的任何物品都有有效期,所以,我不明白为什么在Item类中也没有这种方法。