A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卞潇洋 中级黑马   /  2012-11-22 13:51  /  1499 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

1 个回复

正序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马