UML 类图,A 继承自 Object,B 继承自 A,C 继承自 B

public class Test_2 {

public static void main(String[] args) {

List extends B> list1 = new ArrayList<>(); // 上界

List super B> list2 = new ArrayList<>(); // 下界

A a = new A();

B b = new B();

C c = new C();

Object o = new Object();

// list1.add(o); 不能添加任何元素,因为List中具体是B的哪种子类无法确定

// list1.add(a);

// list1.add(b);

// list1.add(c);

o = list1.get(0);

a = list1.get(0);

b = list1.get(0);

// c = list1.get(0); 编译错误,编译器无法向下转型

// list2.add(o); 编译错误,

// list2.add(a); 因为List中具体是B的哪种父类无法确定

list2.add(b);

list2.add(c);

o = list2.get(0);

// a = list2.get(0); 编译错误,因为List中具体是B的哪种父类无法确定,无法向下转型,而Object是所有类的父类

// b = list2.get(0);

// c = list2.get(0);

}

}

class A {}

class B extends A {}

class C extends B {}

上界

上界用 extends 关键字声明,表示参数化的类型可能是所指定的类或者其任意子类。例如 extends B>,泛型的上界就是 B 类。

形如 List extends B>,具体哪一种不能确定,既可以是 B,也可以是 C。在尝试执行 add() 方法时,List中的类型不能确定是具体哪一种,所以会编译报错。在执行 get() 方法时,不管是 B 还是 C,都可以以 A 类对象来接收。所以 List extends B> 不能添加元素,具有只读属性,只能获取。

下界

下界用 super 关键字声明,表示参数化的类型可能是所指定的类型或者其任意父类。例如 super B>,泛型的下界就是 B 类。

形如 List super B>,具体哪一种不能确定,既可以是 B,也可以是 A,直至 Object类。在尝试执行 add() 方法时,虽然 List 的具体类型不能确定,但是根据多态, B 类及其子类的对象肯定都可以被赋值给 B 的对象,所以只能添加 B 类及其子类的对象。在尝试执行 get() 方法时,List 中的类型是 B 类或者其父类的具体一种,向上直至 Object 类,所以只能将获取的元素赋值给 Object 对象。

以上内容都是我自己经过测试的个人总结,如有纰漏敬请谅解。

java 上界和下界,Java 泛型上下界(上下限)相关推荐

  1. scala泛型上下界

    // 如果既需要上界,又需要下界,那么下界在前,上界在后 object D03_泛型上下界 {class Personclass PoliceMen extends Personclass Super ...

  2. BZOJ 3698: XWW的难题(有源汇上下界最大流)

    题面 XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出了这么一个难题:XWW给你一个N*N的正实数矩阵A, ...

  3. 【Java 泛型】泛型用法 ( 泛型编译期擦除 | 上界通配符 <? extends T> | 下界通配符 <? super T> )

    文章目录 一.泛型擦除 二.泛型的上界通配符 <? extends T> 三.泛型的下界通配符 <? super T> 一.泛型擦除 泛型只保留到 编译期 , 在 编译完毕后 ...

  4. java泛型的上界和下界_java泛型中的上界(extend)和下界(super)

    泛型中上界和下界的定义 上界 extend Fruit> 下界 super Apple> 上界和下界的特点 上界的list只能get,不能add(确切地说不能add出除null之外的对象, ...

  5. java数组的下界,Java泛型_上界extends_下界super

    Java泛型_上界extends_下界super ? 通配符类型 extends T> 表示类型的上界,表示参数化类型的可能是T或是T的子类 super T> 表示类型下界(Java C ...

  6. 12:设计模式、泛型、上下界、视图界定、上下文界定、协变逆变不变

    经典的 WordCount 的讲解 示例代码如下: package com.atguigu.chapter14.homework.wordcount/*val lines = List("a ...

  7. 大数据技术之_16_Scala学习_12_设计模式+泛型、上下界、视图界定、上下文界定、协变逆变不变

    大数据技术之_16_Scala学习_12 第十七章 设计模式 17.1 学习设计模式的必要性 17.2 掌握设计模式的层次 17.3 设计模式的介绍 17.4 设计模式的类型 17.5 简单工厂模式( ...

  8. 泛型java博客园,Java深度历险之Java泛型

    Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换.泛型最主要的应用是在JD ...

  9. Java基础语法十二 泛型程序设计

    1 意义 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用. 常见应用 : ArrayList 2 K T V E ? object等的含义 类型变量使用大写形式 E – Element ( ...

最新文章

  1. Ubuntu 15.10安装ns2.35+nam
  2. 关于学习Python的一点学习总结(7->相关字符串操作)
  3. linux定时任务的设置
  4. ASP.NET实现文件上传
  5. python PyQt5.QtWidgets.QWidget.mouseMoveEvent()函数
  6. [云炬创业基础笔记]第七张创业资源测试15
  7. sql server 2008学习2 文件和文件组
  8. rfid2-micro2440,keil4裸机
  9. 二、PHP框架Laravel学习笔记——路由的定义和控制器
  10. 你可能还不知道的关于JavaScript类型的细节?
  11. C - A very hard mathematic problem (暴力枚举加二分)
  12. android 视频裁剪
  13. SqlServer——正则表达式
  14. 产品经理如何写PRD文档[最全]
  15. 陕南柿子红了_陕南赤子_新浪博客
  16. Matlab滤波器设计——基于filter函数的低通、高通、带通、带阻滤波器
  17. K8S 1.18.0 以及KubeEdge 1.10.3 三机安装部署(含过程记录及遇到的报错和解决方法)
  18. 计算机网络 学习通 第三章作业
  19. 从档案信息管理到档案知识管理
  20. 设计类计算机主机要求,术业有专攻,设计师就该配台专业点的电脑

热门文章

  1. js系列教程8-事件全解
  2. MC-GAN:Multi-Content GAN for Few-Shot Font Style Transfer
  3. python计算两张图像的L1和L2损失
  4. windowns10安装httpd
  5. 【转】几款移动跨平台App开发框架比较
  6. Vijos——T 1016 北京2008的挂钟 || 洛谷—— P1213 时钟
  7. The source attachment does not contain the source for the file  ActionSupport.class 错误
  8. linux命令存放 bash: xxx command not found
  9. 在你的网站中使用 AdSense广告
  10. Java程序低手之关于泛型(Generic)