我有课:
class Animal{
public void type(){
System.out.println("I am Animal");
}
}
class Dog extends Animal{
public void type(){
System.out.println("I am Dog");
}
}
class Cat extends Animal{
public void type(){
System.out.println("I am Cat");
}
}
class Haski extends Dog{
public void type(){
System.out.println("I am Haski");
}
}
我创建List有wildcards:
List<? extends Animal> animalList = new ArrayList<Animal>();
我知道我无法向animalList. 我在不同的书籍、互联网上的文章、视频课程中都读到过它,但我仍然不明白为什么?如果我们结animalList只包含对象,extends Animal为什么java不能添加任何对象并将其objects extends Animal强制转换为Animal?
animalList.add(new Dog()); //cast dog to Animal
animalList.add(new Cat()); //cast cat to Animal
编译器有足够的信息 -objects extends Animal为什么它不能转换?
编辑:
所以我不明白。
List<Animal> animalList1 = new ArrayList<Animal>();
animalList.add(new Animal());
animalList.add(new Dog());
animalList.add(new Cat());
animalList.add(new Haski());
和
List<? extends Animal> animalList
有一种感觉,他们应该是一样的。但我感觉不到原理上的区别
相关分类