Различное поведение массива v.s. list <T> в Java для подкласса
Выученный List<Dog>
не является подклассом List<Animal>
по ряду причин (Является ли List <Dog> подкласс List <Animal> ? Почему Генераторы Java неявно полиморфны? и создают список списка строк в Java)
Но я тестировал, что массив работает - экземпляр Dogs[]
может быть назначен экземпляру Animal[]
. Но не имеет ли такая массив проблема с помещением экземпляра Cat
в массив Dog
?
Смотрите мой ниже код для TestArray
, который работает для массива, но TestList
не работает для List<T>
.
Любые мысли?
Исходный код в Java,
import java.util.*;
public class TestInheritance {
void TestArray() {
Dog[] dogs = new Dog[3];
Animal[] ans = dogs;
Cat c = new Cat();
ans[2] = c;
}
void TestList() {
List<Dog> dogs = new ArrayList<Dog>();
/*
* compile error in below statement, Type mismatch: cannot convert from List<TestInheritance.Dog>
* to List<TestInheritance.Animal>
*/
List<Animal> ans = dogs;
}
class Animal {
Animal() {
}
void WhoAmI() {
System.out.println("I am Animal!");
}
}
class Dog extends Animal {
Dog() {
}
void Dog() {
System.out.println("I am Dog!");
}
}
class Cat extends Animal {
Cat() {
}
void Cat() {
System.out.println("I am Cat!");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}