<? супер E> и <? расширяет E> для списка

Имея следующую простую структуру классов: I '

class A {
}

class B extends A {
}

class C extends B {
}

m создаем ArrayList для хранения объектов ранее созданных классов:

List list1 = new ArrayList<a>();
List list2 = new ArrayList();
List list3 = new ArrayList();

List list4 = new ArrayList</a><a>();
List list5 = new ArrayList();
List list6 = new ArrayList();
</a>

Для каждого из этих списков яm пытается добавить 1 объект каждого ранее созданного класса: A, B, C. Единственная возможная комбинация:

добавление объекта класса A, B, C в список4

добавление объекта классов B и C в список5

добавление объекта класса C в список list6. Остальные попытки дают ошибки компилятора, такие как мы:

Метод add (capture # 1-of? Extends A) в типе List не применим для аргументов (A)

Почему можноt Я добавляю какой-либо объект класса A, B, C в list1 / 2/3? Почему например list4 принимает объекты классов A, B, C, если они должны быть суперклассом класса A, так как список4 определен?

Ответы на вопрос(5)

Ваш ответ на вопрос