Сегодня я прочитал несколько статей о ковариантности, контравариантности (и инвариантности) в Java. Я прочитал английскую и немецкую статью в Википедии, а также некоторые другие публикации в блоге и статьи от IBM.
Но я все еще немного запутался в том, что это такое? Некоторые говорят об отношениях между типами и подтипами, другие говорят о преобразовании типов, а некоторые говорят, что раньше он решал, переопределен ли метод или перегружен.
Поэтому я ищу простое объяснение на простом английском языке, которое показывает новичку, что такое Ковариация и Контравариантность (и Инвариантность). Плюс за простой пример.