https://www.zhihu.com/question/20400700/answer/117464182
Java is a single inheritance, and all inherited classes form a tree. Class Apple (A)
Class Banana (B) extend Apple (a) class Orange ()) extend Apple (a) generics
A super B means that A is the parent or ancestor of B
A extend B means a is a subclass or descendant of B.
Because the tree is asymmetrical in its structure.
1) Parameters written: t<? Super B> For this generic,? Represents the element type in the container, because it only specifies that the element must be a superclass of B, causing the element to have no explicit "root" (except object), so this generic type you cannot actually use (except to force the element into object). So you can only insert operations, but not read
2) Parameters written: t<? Extends B> because specifying the "root" of all the elements is B, you can safely use the elements in the container at any time, but the insertion is problematic because there are many sub-trees with the ancestor of B, different subtrees are incompatible, so it is forbidden to do the insert operation, only read
Java generic <? Super T> How does super understand? How is it different from extends?