public <T extends Animal> void takeAnimals(ArrayList<T> animals) {

for(Animal animal : animals){
animal.eat();
}


public void takeAnimals(ArrayList<? extends Animal> animals) {

for(Animal animal : animals){
animal.eat();
}


이게 도대체 뭔차이인데