我最初的问题是:
为什么第二次创建失败?
该问题被标记为已回答,并带有更改该问题的提示,因此是新问题。我现在就这样做
List<Animal> list = new ArrayList<Animal>();
List<Animal> list2 = new ArrayList<Cat>();
我现在明白了。这是因为稍后您将使用list2
作为动物列表。一旦添加了Dog,我们就会有ClassCastException或类似的东西。这种情况应该通过使用泛型来消除,因此是不可接受的,否则泛型实现将毫无用处。
正如其中一项评论所述,这应该起作用:
List<? extends Animal> list3 = new ArrayList<Cat>();
那为什么上面解释的问题突然消失了?