猿问

我不理解 java 中的通配符

我有课:


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

有一种感觉,他们应该是一样的。但我感觉不到原理上的区别


喵喔喔
浏览 168回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答