java逆变与协变(待完善)

协变:若B是A的子类,且F(B)是F(A)的子类,则F为协变

逆变:若B是A的子类,且F(B)是F(A)的父类,则F为逆变

java中的协变:B是A的子类,则List是List的子类

java中的逆变:B是A的子类,则List是List的子类

java中协变与逆变的约束:java中的协变逆变和约束,都是出于对多态的应用。

多态:同一个接口,使用不同的实例执行不同的操作。

协变约束:协变方法支持对传入参数的读操作,但不支持修改操作

逆变约束:

原文地址:https://www.cnblogs.com/huiandong/p/9941477.html

时间: 2024-12-10 20:50:40

java逆变与协变(待完善)的相关文章

Java 逆变与协变

最近一直忙于学习模电.数电,搞得头晕脑胀,难得今天晚上挤出一些时间来分析一下Java中的逆变.协变.Java早于C#引入逆变.协变,两者在与C#稍有不同,Java中的逆变.协变引入早于C#,故在形式没有C#直观(Google推出的基于jvm的Kotlin语音,则完全走向了C#的路线).Java中逆变.协变,在泛型集合使用中更多些.更直观(像C#中的用法在Java中较少出现,但并非不可). 正常泛型集合的使用 示例代码如下: public static void main(String[] arg

Java中的逆变与协变(转)

看下面一段代码 Number num = new Integer(1); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatch List<? extends Number> list = new ArrayList<Number>(); list.add(new Integer(1)); //error list.add(new Float(1.2f)); //error 有人会

Java中的逆变与协变

看下面一段代码 Number num = new Integer(1); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatch List<? extends Number> list = new ArrayList<Number>(); list.add(new Integer(1)); //error list.add(new Float(1.2f)); //error 有人会

Java中的逆变和协变

// public final class Integer extends Number Number num = new Integer(1); List<Number> list = new ArrayList<>(); list.add(new Integer(3)); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatch List<? extends Number&

Java中的逆变与协变 很直接不饶弯的讲出来了

http://blog.csdn.net/z69183787/article/details/51598345 看下面一段代码: Number num = new Integer(1); List<Number> list = new ArrayList<>(); list.add(new Integer(3)); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatch List&

C# 逆变与协变

原文:C# 逆变与协变 该文章中使用了较多的 委托delegate和Lambda表达式,如果你并不熟悉这些,请查看我的文章<委托与匿名委托>.<匿名委托与Lambda表达式>以便帮你建立完整的知识体系. 在C#从诞生到发展壮大的过程中,新知识点不断引入.逆变与协变并不是C#独创的,属于后续引入.在Java中同样存在逆变与协变,后续我还会写一篇Java逆变协变的文章,有兴趣的朋友可以关注一下. 逆变与协变,听起来很抽象.高深,其实很简单.看下面的代码: class Person {

C#高级语法之泛型、泛型约束,类型安全、逆变和协变(思想原理)

一.为什么使用泛型? 泛型其实就是一个不确定的类型,可以用在类和方法上,泛型在声明期间没有明确的定义类型,编译完成之后会生成一个占位符,只有在调用者调用时,传入指定的类型,才会用确切的类型将占位符替换掉. 首先我们要明白,泛型是泛型,集合是集合,泛型集合就是带泛型的集合.下面我们来模仿这List集合看一下下面这个例子: 我们的目的是要写一个可以存放任何动物的集合,首先抽象出一个动物类: //动物类 public class Animal { //随便定义出一个属性和方法 public Strin

逆变与协变详解

逆变(contravariant)与协变(covariant)是C#4新增的概念,许多书籍和博客都有讲解,我觉得都没有把它们讲清楚,搞明白了它们,可以更准确地去定义泛型委托和接口,这里我尝试画图详细解析逆变与协变. 变的概念 我们都知道.Net里或者说在OO的世界里,可以安全地把子类的引用赋给父类引用,例如: 1 2 3 //父类 = 子类 string str = "string"; object obj = str;//变了 而C#里又有泛型的概念,泛型是对类型系统的进一步抽象,比

Scala 深入浅出实战经典 第81讲:Scala中List的构造是的类型约束逆变、协变、下界详解

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-97讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/ceac2IoB-ik/优酷:http://v.youku.com/v_show/id_