Chinaunix首页 | 论坛 | 博客
  • 博客访问: 418729
  • 博文数量: 79
  • 博客积分: 2886
  • 博客等级: 少校
  • 技术积分: 968
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-16 10:33
文章分类

全部博文(79)

文章存档

2013年(7)

2012年(17)

2011年(28)

2010年(25)

2009年(1)

2008年(1)

我的朋友

分类: Java

2013-02-18 17:45:36

   
    //Apple Orange 都继承自Fruit类,同时Jonathan是Apple的子类
    List list = new ArrayList(); /? extends T 通配符告诉编译器我们在处理一个类型T的子类型,但我们不知道这个子类型究竟是什么。
    //list.add(new Apple());Error
    //list.add(new Fruit());Error


    List list = new ArrayList();
    list.add(new Apple());//可以
    list.add(new Fruit());//可以


    List list = new ArrayList();
    list中为什么不能加入Fruit类和Fruit类的子类呢,原因是这样的
       List表示上限是Fruit,下面这样的赋值都是合法的
       List list1 = new ArrayList();
       List list2 = new ArrayList();
       List list3 = new ArrayList();
       如果 List支持add方法的方法合法的话
       list1可以add Fruit和所有Fruit的子类
       list2可以add Apple和所有Apple的子类
       list3可以add Jonathan和所有Jonathan的子类
       这样的话,问题就出现了
       List所应该持有的对象是Fruit的子类,而且具体是哪一个
       子类还是个未知数,所以加入任何Fruit的子类都会有问题,因为如果add Apple

       的话,可能List持有的对象是new ArrayList()

PS:其实就是一个父类向下转型的问题。


       而List list 表示list持有的对象是Fruit的父类,下限是  Fruit,所以list中add Fruit或Fruit的子类是没有问题的


阅读(3140) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~