Понимание верхних и нижних границ? в Java

Мне действительно тяжело понять подстановочный знак. У меня есть несколько вопросов по этому поводу.

? в качестве параметра типа можно использовать только методы. например:printAll(MyList<? extends Serializable>) Я не могу определить классы с? в качестве параметра типа.

Я понимаю верхнюю границу?. printAll(MyList<? extends Serializable>) означает: "printAll распечатаетMyList если у него есть объекты, которые реализуютSerialzable интерфейс."
У меня есть небольшая проблема сsuper. printAll(MyList<? super MyClass>) означает: "printAll распечатаетMyList если у него есть объектыMyClass или любой класс, который расширяетсяMyClass (потомкиMyClass)."

Поправь меня, где я ошибся.

Короче толькоT или жеE или жеK или жеV или жеN может использоваться в качестве параметров типа для определения общих классов.? может использоваться только в методах

Обновление 1:

public void printAll(MyList<? super MyClass>){
    // code code code
}

Согласие с книгой Ивор Хортон,MyList<? super MyClass> означает, что я могу напечататьMyList если у него есть объектыMyClass или любой из интерфейсов или классов, которые это реализует. Это,MyClass этонижняя граница, Это последний класс в иерархии наследования. Это означает, что мое первоначальное предположение было неверным.

Так скажи, еслиMyClass выглядит как:

public class MyClass extends Thread implements ActionListener{
    // whatever
}

тогда,printAll() напечатает, если
1. Есть объектыMyClass в списке
2. Есть объектыThread или жеActionListener вList

Обновление 2:

Итак, после прочтения многих ответов на вопрос, вот мое понимание:

? extends T означаетлюбой класс, который расширяетсяT, Таким образом, мы имеем в видудетиT, Следовательно,T это верхняя граница. Самый верхний класс в иерархии наследования

? super T означаетлюбой класс / интерфейс, которыйsuper изT, Таким образом, мы имеем в виду всеродителиT. T таким образом, нижняя граница. Самый нижний класс в иерархии наследования

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

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