栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

请解释一下extends 和super 泛型限定符

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

请解释一下extends 和super 泛型限定符

考察点:JAVA泛型

(1)泛型中上界和下界的定义

上界<? extend Fruit>

下界<? super Apple>

(2)上界和下界的特点

上界的list只能get,不能add(确切地说不能add出除null之外的对象,包括Object)

下界的list只能add,不能get

(3)示例代码

import java.util.ArrayList;import java.util.List;  class Fruit {}class Apple extends Fruit {}class Jonathan extends Apple {}class Orange extends Fruit {}  public class CovariantArrays {  public static void main(String[] args) {    //上界    List<? extends Fruit> flistTop = new ArrayList<Apple>();    flistTop.add(null);    //add Fruit对象会报错    //flist.add(new Fruit());    Fruit fruit1 = flistTop.get(0);      //下界    List<? super Apple> flistBottem = new ArrayList<Apple>();    flistBottem.add(new Apple());    flistBottem.add(new Jonathan());    //get Apple对象会报错    //Apple apple = flistBottem.get(0);  }}

(4)上界<? extend Fruit> ,表示所有继承Fruit的子类,但是具体是哪个子类,无法确定,所以调用add的时候,要add什么类型,谁也不知道。但是get的时候,不管是什么子类,不管追溯多少辈,肯定有个父类是Fruit,所以,我都可以用最大的父类Fruit接着,也就是把所有的子类向上转型为Fruit。

下界<? super Apple>,表示Apple的所有父类,包括Fruit,一直可以追溯到老祖宗Object 。那么当我add的时候,我不能add Apple的父类,因为不能确定List里面存放的到底是哪个父类。但是我可以add Apple及其子类。因为不管我的子类是什么类型,它都可以向上转型为Apple及其所有的父类甚至转型为Object 。但是当我get的时候,Apple的父类这么多,我用什么接着呢,除了Object,其他的都接不住。

所以,归根结底可以用一句话表示,那就是编译器可以支持向上转型,但不支持向下转型。具体来讲,我可以把Apple对象赋值给Fruit的引用,但是如果把Fruit对象赋值给Apple的引用就必须得用cast。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/363700.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号