これは、Object が Integer と String のスーパークラスであるためです。一般的な関係を逆に解釈しています。
編集
この状況について考えてみてください。
List<? extends myClass> listOfMyClass = new ArrayList<Object>();
この場合、Object型要素のリストになりますが、listOfMyClassリストの宣言によって追加された制限を尊重する必要があります。
myClass階層に属する任意のオブジェクトをリストに追加できます。ArrayListインターフェイスを実装している は、要求されたときに型要素Listを保持 (および返し)します。Object
もちろん、次のように定義できます。
List<? extends myClass> listOfMyClass = new ArrayList<mySuperClass>();
お分かりかもしれませんが、 にはArrayList、同じタイプまたはスーパータイプのオブジェクトが含まれている必要があります。myClassこの場合、それはmySuperClass. このリストはmySuperClass、要求されたときにオブジェクトを返します。
mySuperClassClassX階層に属さないクラスとして、次の行はコンパイルされません。
List<? extends myClass> listOfMyClass = new ArrayList<ClassX>();
ClassXは のスーパークラスではないためですmyClass。