我有一些杂货清单,其中存放了一些食品和饮料。杂货店是抽象类,食品和饮料都对其进行了扩展。
我在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)。
[检查类型后立即尝试投射,例如:
if(groceries.get(i) instanceof Food) {
Food.saveToFile((Food)groceries.get(i));
}
else
Beverage.saveToFile((Beverage)groceries.get(i));
[azurefrog建议,我在Grocery内编写了一个抽象的saveToFile方法:
public abstract void saveToFile();
然后我像这样重写了saveListToFile:
public static void saveListToFile(ArrayList<Grocery> groceries) {
for(Grocery item: groceries)
item.saveToFile();
}
这种方式有效,因为它使用了多态性,并且在每个项目的适当类内运行了适当的方法。
谢谢!