Animal - абстрактный класс, Cat - наследник Animal. Есть класс, параметризованный абстрактным классом Animal:
public class AnimalCage<T extends Animal> {
/**
* Вместимость
*/
private int capacity;
/**
* Коллекция для хранения животных
*/
private ArrayList<T> animals;
public AnimalCage(int n) {
this.capacity = n;
animals = new ArrayList<>(n);
}
/**
- Садим животное типа T в клетку
- @param a - животное, которым параметризован объект клетки
*/
public void add(T a) {
animals.add(a);
}
В main объявляем клетку:
AnimalCage<? extends Animal> someCage;
Но инициализируем её как:
someCage = new AnimalCage<Cat>;
Все работает. Но при попытке положить в someCage объект класса Cat выдает ошибку:
someCage.add(cat);
Скорее всего, в моей голове - недопонимание, помогите, пожалуйста, разобраться.

AnimalCage<? extends Animal> someCage;=>AnimalCage<Animal> someCage;? – tym32167 Dec 15 '21 at 13:46AnimalCage<? extends Animal> someCage;должно означать? – tym32167 Dec 15 '21 at 14:11