次のコードを検討してください。
MyClass myClass= new MyExtendedClass();
myClass.method();
ここで、MyExtendedClass は MyClass のサブタイプです。2番目の文字列コンパイラのコンパイル状態コンパイラで理解したようにmethod()
、 のソースコード内のメソッドの存在を確認しましたMyClass
。正しい理屈ですか?今考えます
List<Integer> ints= new ArrayList<Integer>();
ints.add(2);
List<? extends Integer> lst = ints;
lst.get(0);
のソースはどこで見ることができますList<? extends Integer>
か? 今考えてみましょう:
new ArrayList<Integer>().getClass().equals(
new ArrayList<String>().getClass());// return true.
そのため、実行時のクラスではArrayList<Integer>
とArrayList<String>
は同等ですが、コンパイル状態ではそうではありません。なんで?ArrayList<String>
とのソースはどこArrayList<Integer>
ですか?