java - 无法调用初始化为父类(super class)的 ArrayList 中派生类的方法

标签 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 类中的方法。编译器似乎根本看不到该方法。谢谢!

最佳答案

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

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

冰箱里的任何元素都会有有效期,所以,我不明白为什么不在 Item 类中也有这个方法。

关于java - 无法调用初始化为父类(super class)的 ArrayList 中派生类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53879807/

相关文章:

C# - 创建一个可保存的对象

Java类继承覆盖List字段

entity-framework - 对继承的实体使用 Include()

java - 如何在普通数组上执行 Lambda 表达式和 forEach?

使用 Mockito 进行 Java 单元测试。函数内的函数调用

java - Java中的下拉菜单

带有新参数的 Javascript 继承

java - 是否可以使用 war 文件作为图书馆?

Java OOP 优化代码

javascript - 查询对象数组javascript