话说学泛型与多态让我真的晕了一把
泛型代码可以这样些- List<Child> list = new ArrayList<Child>();
复制代码 但不能这样写- List<Parent> list = new ArrayList<Child>();
复制代码 这与数组很不一样:- import java.util.*;
- class Parent{}
- class Child extends Parent{}
- public class TestPoly{
- public static void main(String args[]){
- Parent[] myArray =new Child[3];
- }
- }
复制代码 这段代码是可以通过的,所以泛型中的多态工作方式与数组中的不同。
但如果是作为一个方法的话,如这样:- public void addAnimal(List<Animal> animals){
- animals.add(new Dog());
- }
- public static void main(String[] args){
- List<Dog> animals = new ArrayList<Dog>();
- animals.add(new Dog());
- animals.add(new Dog());
- AnimalDoctor doc = new AnimalDoctor();
- doc.addAnimal(animals);
- }
复制代码 当然这样肯定不会不会执行成功,那有什么方法可以解决吗,是的,有:将方法中的参数List<Animal> animals 变为List<? extends Animal >但要付出代价,即传入以后将不能对集合进行添加。当然还有另一种方法可以改变这种局面,那就是<? super >,如果Dog、cat继承了Animal,那么可以这样写<? super Dog>,这样便可以进行添加了!
|