Так что проблема, с которой я сталкиваюсь, - это. Я написал метод как часть программы, которую я использую для отображения всех объектов в ArrayList. В этом ArrayList хранятся три разных типа объектов: грибы, цветы и сорняки. Я могу позвонить plantList.get(i).getName()
и plantList.get(i).getColor
методам без проблем. Обе эти переменные относятся к родительскому классу Plant. Однако при вызове следующего метода plantList.get(i).getPoison()
(этот метод относится к подклассу Fungus) Я получаю ошибку компилятора, говоря, что он не может найти переменную Fungus.Доступ только к переменным класса родителя из метода
Я пробовал это с любой другой переменной, уникальной для подкласса, и происходит то же самое. Поэтому я могу получить доступ к переменным из родительского класса «Завод», но не из каких-либо подклассов «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());
}
}
}
Ожидаемое поведение. Вы должны набирать приведение к соответствующему типу дочернего класса, чтобы получить доступ к методам, специфичным для дочернего класса. – JavaHopper