Здравствуйте!
Цитата из учебника (англ. и русская версия, Thinking in Java):
The argument apples is a List of some type that is the base type of Apple; thus you know that it is safe to add an Apple or a subtype of Apple.
Аргумент apples является контейнером List для некоторого типа, являющегося базовым для Apple; из этого следует, что Apple и производные от Apple типы могут безопасно включаться в контейнер.
public class SuperTypeWildcards {
static void writeTo(List<? super Apple> apples) {
apples.add(new Apple());
apples.add(new Jonathan());
// apples.add(new Fruit()); // Error
}
Я не могу здесь найти логику. Если
apples является контейнером
List для некоторого типа, являющегося базовым для
Apple, почему же тогда нельзя добавить
Fruit в контейнер, а можно добавить, к примеру,
Jonathan, который НЕ является базовым для
Apple, а производным от него?