Очень нужна помощь... Не могу понять вот эти вопросы: 1. чем отличаются вот эти 2 дженерика <T extends MyClass> <? extends MyClass> 2. Окончательно путаюсь вот в этом. Если у нас есть вот такое <? extends MyClass> то мы можем только читать оттуда, а добавлять ничего нельзя? При этом при чтении придется вызывать Object?
for (Object pp : list) {
            System.out.println(pp);
        }
Зачем мы это используем? 3. Главный вопрос Есть вот такой код, он работает как-то
List<Parent> p = new ArrayList<>();
       p.add(new Parent());

       List<? super Child> list = new ArrayList<>();
       list = p;
       list.add(new Child());
       list.add(new ChildChild());
       list.add((Child) new Parent());

       for (Object pp : list) {
           System.out.println(pp);
       }
Почему мы можем напрямую (через метод add() ) добавлять только потомков, хотя у нас стоит <? super> ? Почему при этом мы можем все равно добавить класс-родитель? В общем, уже совсем ничего не понимаю, help !!!!!