The following code has a compilation errors. It is confusing because you think somewhere to find the problem.
import java.util.*; abstract class Animal{ public abstract void checkup(); } class Dog extends Animal{ public void checkup(){ System.out.println("Dog checkup"); } } class Cat extends Animal{ public void checkup(){ System.out.println("Cat checkup"); } } class Bird extends Animal{ public void checkup(){ System.out.println("Bird checkup"); } } public class AnimalDoctorGeneric { private void checkAnimals(ArrayList<Animal> animals){ for(Animal a : animals){ a.checkup(); } } private void addAnimals(List<Animal> animals){ animals.add(new Dog()); } public static void main(String [] args){ List<Animal> animals = new ArrayList<Animal>(); animals.add(new Dog()); animals.add(new Dog()); AnimalDoctorGeneric doc = new AnimalDoctorGeneric(); doc.addAnimals(animals); doc.checkAnimals(animals);// error here!!!! //doc.checkAnimals((ArrayList<Animal>) animals); this line is the correct code //to use checkAnimals method, the argument has to be correct type. //System.out.println(animals.get(1) + " " + animals.get(2)); } } |
To fix the code the easiest way is to cast animals to ArrayList. So to change line 36 to:
doc.checkAnimals((ArrayList) animals);
The reason is that ArrayList class implements List interface, they are different, List need to be cast to ArrayList in order to satisfy method checkAnimals(ArrayList animals).