//Apple Orange 都继承自Fruit类,同时Jonathan是Apple的子类
    List<? extends Fruit> list = new ArrayList<Apple>();
    //list.add(new Apple());Error
    //list.add(new Fruit());Error

List<? super Fruit> list = new ArrayList<Apple>();
    list.add(new Apple());//可以
    list.add(new Fruit());//可以

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

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

java generic super, extend的更多相关文章

  1. java generic type

    java generic type: 类型安全.类型参数化.不需要强制转换

  2. JAVA面向对象-----super关键字

    JAVA面向对象-–super关键字 1:定义Father(父类)类 1:成员变量int x=1; 2:构造方法无参的和有参的,有输出语句 2:定义Son类extends Father类 1:成员变量 ...

  3. Java 泛型 <? super T> 中 super 怎么 理解?与 < ? extends T>有何不同?

    Java 泛型 <? super T> 中 super 怎么 理解?与 extends 有何不同? 简介 前两篇文章介绍了泛型的基本用法.类型擦除以及泛型数组.在泛型的使用中,还有个重要的 ...

  4. Python面试题之Python和Java中Super方法的区别

    python 的 super 是一个函数,需要两个参数,第一个参数是类,第二个参数是实例,返回值是一个类对象. 其意义是:站在参数2这个实例的角度看去, 参数1这个类的‘父亲’是谁,把‘父亲’返回. ...

  5. java中super()和this()、super和this的区别

    1.super()和this()区别: super():调用父类无形参的构造方法: super(形参):调用父类中某个带形参的构造方法: this(形参):调用本类中另一种形式的构造方法: 注意:放在 ...

  6. Java的super、this、重写

    Java的super.this.重写 一.super的注意点: super调用父类的构造方法,必须在构造方法的第一个: super只能出现在子类的构造方法或者方法中: this和super不能同时调用 ...

  7. java中super的两种用法

    通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...

  8. Java中super的几种用法并与this的区别

    1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位. class Base { Base() { System.out.println("Base"); ...

  9. 关于java中super()和this()

    在java中this表示当前类中的对象,super则表示父类中的对象.比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个 ...

随机推荐

  1. 通过web界面查看hadoop集群运行日志的地址

    通过web界面查看hadoop集群运行日志的地址: http://hostname:8088/logs/ SecurityAuth-root.audit 0 bytes  Aug 27, 2016 5 ...

  2. Hystrix使用Commond的三种方式

    目录(?)[-] 1 依赖引入 2 使用 21 Hystrix command 211 同步执行 212 异步执行 213 反应执行 214 三种模式使用区别 22 Fallback 23 Error ...

  3. beans.xml的用法

    beans.xml <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="ht ...

  4. JS 遍历 json key ,获取设置可变的key

    $(rec.data[id]).each(function(){ for(var key in this){ if(key == value){ console.info(this[key].desc ...

  5. vim 笔记

    1.替换 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :%s/vivian/sky/(等同于 : ...

  6. iOS中的动画(转载)

    iOS中的动画  最近两天没事在慢慢学习一些动画,好多东西长时间不用都给忘了,找到一篇介绍很详细的文章就粘贴了过来以备复习,原文地址:https://my.oschina.net/aofe/blog/ ...

  7. 浅谈NFC、RFID、红外、蓝牙的区别

    很多朋友对NFC和RFID这两个词感到陌生,但是手机经常会出现支持NFC支付,又没太在意,NFC与RFID其实是手机支付的种方式(手机支付也被称作移动支付,是一种允许移动用户使用其移动终端对所消费的商 ...

  8. MyBatis Generator 学习

    根据数据库,自动生成 VO.XML或者DAO的工具. 同大多数工具(或者框架)一样,需要加载一个配置文件,然后根据配置文件中的内容连接数据库,访问其中的表内容,最后生成实体类以及MAPPER. 占位用 ...

  9. BestCoder Round #12 War(计算几何)

    War Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  10. sdut 2152:Balloons(第一届山东省省赛原题,DFS搜索)

    Balloons Time Limit: 1000MS Memory limit: 65536K 题目描述 Both Saya and Kudo like balloons. One day, the ...