Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将超类定义为返回类型时返回子类_Java_List_Data Structures_Extends - Fatal编程技术网

Java 将超类定义为返回类型时返回子类

Java 将超类定义为返回类型时返回子类,java,list,data-structures,extends,Java,List,Data Structures,Extends,关于同一主题的问题的延伸: 我有一个后续问题 既然你有课 动物亲本 狗儿 当您将返回类型定义为列表时,为什么不能返回列表 private class Animal{}; private class Dog extends Animal{}; public List<Animal> makeAnimalListOfDogs(Dog dog1, Dog dog2){ List<Dog> dogs = new List&l

关于同一主题的问题的延伸: 我有一个后续问题

既然你有课 动物亲本 狗儿

当您将返回类型定义为列表时,为什么不能返回列表

    private class Animal{};

    private class Dog extends Animal{};

      public List<Animal> makeAnimalListOfDogs(Dog dog1, Dog dog2){
            List<Dog> dogs = new List<Dog>;
            dogs.add(dog1);
            dogs.add(dog2);
            return dogs;
        }
所以问题不在于如何让它工作,而在于它为什么不工作。 犬类列表是一个包含动物的列表,因为犬类是动物,对吗?

请查看您链接到自己的问题:

不,列表不是列表。考虑一下你可以用一个列表来做什么,你可以添加任何动物。包括一只猫。现在,你能在一窝小狗中添加一只猫吗?绝对不是

// Illegal code - because otherwise life would be Bad
List<Dog> dogs = new List<Dog>();
List<Animal> animals = dogs; // Awooga awooga
animals.add(new Cat());
Dog dog = dogs.get(0); // This should be safe, right?
突然你有一只非常困惑的猫


现在,你不能将猫添加到列表中。这个问题与你链接到的问题有何不同?请参阅John Skeet对你链接到自己的问题的回答。如果你不理解这个答案,你应该在你的问题中明确你有什么问题。不,列表不是列表。考虑一下你可以用一个列表来做什么,你可以添加任何动物。包括一只猫。现在,你能在一窝小狗中添加一只猫吗?绝对不是。约翰·斯基特
List<Animal> animals = new ArrayList<Animals>();
animals.addAll(dogs)
return animals;
// Illegal code - because otherwise life would be Bad
List<Dog> dogs = new List<Dog>();
List<Animal> animals = dogs; // Awooga awooga
animals.add(new Cat());
Dog dog = dogs.get(0); // This should be safe, right?