可能是一个非常愚蠢的问题,但我仍然希望清除这个概念。请帮帮我。
List<Object> myObjectArrayList=new ArrayList<Object>();
Object myObject=new Object();
myObjectArrayList.add(obj);
myObjectArrayList.add("My String");
这里使用Java的Generics功能我将集合的类型设置为String。 但myObjectArrayList可以将 myObject 添加到列表中,因为Object类是默认情况下Java中所有类的父类。 现在
List<String> myStringArrayList = new ArrayList<String>();
myObjectArrayList = myStringArrayList;
当我在做的时候 myObjectArrayList = myStringArrayList; 我收到编译错误:
Type mismatch: cannot convert from List<String> to List<Object>
为什么Java不允许分配List&lt;字符串&gt;将对象转换为List&lt;对象&gt;?我的问题是,如果我有一个父类列表和子类列表,为什么Java不允许我们将子类列表对象分配到父类列表对象?
答案 0 :(得分:1)
一个词:遗传。
String是一个Object,但Object不必是String。
通常的例子是点和粒子。粒子是质量点。粒子是一个更多的点。所以你可以说粒子是质量为零的点,但点不是粒子。
你有一个点的集合,但是你想要点的集合是粒子的集合。这是List<Object>
和List<String>
的错误。
相反的情况很好,但你没有尝试。