【发布时间】:2016-07-27 19:56:53
【问题描述】:
所以我遇到的问题是这个。我编写了一个方法作为程序的一部分,用于显示 ArrayList 中的所有对象。在这个 ArrayList 中存储了三种不同类型的对象:Fungus、Flowers 和 Weeds。我可以毫无问题地调用plantList.get(i).getName() 和plantList.get(i).getColor 方法。这两个变量都属于名为 Plant 的父类。然而,当调用下面的方法plantList.get(i).getPoison()(这个方法属于Fungus子类)时,我得到一个编译器错误,说它找不到变量Fungus。
我已经对子类独有的所有其他变量进行了尝试,并且发生了同样的事情。所以我可以从父类“Plant”访问变量,但不能从“Fungus”“Flower”或“Weed”的任何子类访问。我不熟悉使用子类和超类,所以我很难弄清楚问题出在哪里。
public static void displayPlant(ArrayList<Plant> plantList) {
for (int i = 0; i < plantList.size(); i++) {
System.out.print(plantList.get(i).getName());
System.out.print(plantList.get(i).getID());
System.out.print(plantList.get(i).getColor());
if (plantList.get(i).contains(Fungus) == true) {
System.out.print(plantList.get(i).getPoison());
}
else if (plantList.get(i).contains(Flower) == true) {
System.out.print(plantList.get(i).getSmell());
System.out.print(plantList.get(i).getThorns());
}
else {
System.out.print(plantList.get(i).getPoison());
System.out.print(plantList.get(i).getEdible());
System.out.print(plantList.get(i).getMedicinal());
}
}
}
【问题讨论】:
-
这是预期行为。您应该将类型转换为相应的子类类型,以便访问子类特定的方法。
标签: java inheritance subclass superclass