【发布时间】:2019-11-26 15:35:36
【问题描述】:
我有一份杂货清单,里面存放了一些食物和饮料。 Grocery 是一个抽象类,Food 和 Beverage 都扩展了它。
我在 Grocery 中创建了一个静态方法来将杂货列表保存在文件中。此方法扫描整个列表,并且对于其中的每个元素,如果元素是食物,它应该调用 Food 类中的 saveToFile 方法,如果元素是饮料,它应该调用 Beverage 类中的 saveToFile 方法。
public static void saveListToFile(ArrayList<Grocery> groceries) {
for(int i = 0; i < groceries.size(); i++) {
if(groceries.get(i) instanceof Food) {
Food.saveToFile(groceries.get(i));
}
else
Beverage.saveToFile(groceries.get(i));
}
}
这不会编译。相反,我收到以下错误:Food 类型中的方法 saveToFile() 不适用于参数(杂货店)。
【问题讨论】:
-
你想做什么,你面临的问题是什么?上面的代码几乎没有提供任何上下文。
-
如果
Grocery上有一个saveToFile()方法,你为什么不直接调用它呢?多态性的全部意义在于底层对象知道自己的类型并将调用正确的实现。 -
嗯,我想我已经很好地解释了我在我写的描述中想要做什么。这是我得到的错误:Food 类型中的方法 saveToFile() 不适用于参数(杂货店)。
-
这可能是您必须将
groceries.get(i)的结果转换为Food或Beverage:Food.saveToFile((Food) groceries.get(i))。不幸的是,您没有发布编译器的错误消息或Food.saveToFile/Beverage.saveToFile的声明 -
@stoneburner:我确实用错误消息更新了您的问题(这有助于回答大量问题的人)。我还删除了“我是菜鸟”部分——每个人都必须从某个地方开始,其他有同样问题的人会更容易找到你的问题。
标签: java