我正在通过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 类中的方法。编译器似乎根本看不到该方法。谢谢!
最佳答案
Item
还应该具有方法 getDaysToExpire
() 才能工作...但是当您调用它们时,正确的 getDaysToExpire
()将调度派生类。
另一种方法是将 items.get(2)
类型转换为 PerishableItem
,然后调用 getDaysToExpire
,但这绝对不是一个好的设计。
冰箱里的任何元素都会有有效期,所以,我不明白为什么不在 Item 类中也有这个方法。
关于java - 无法调用初始化为父类(super class)的 ArrayList 中派生类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53879807/