一个一直有点模糊的概念,记录一下,协变是指一个类型随着它关联的类型一起变化,有点抽像,java中体现协变的包括两点:
1.数组
如果 A 是 B 的超类,则 A[] 也是 B[] 的超类,所有需要 A[] 的地方都可以用 B[] 代替。
public class Test2 {
public static void main(String[] args){
Integer[] ints=new Integer[1];
ints[0]=99;
show(ints);
}
static void show(Number[] ns){
System.out.println(Arrays.toString(ns));
}
}
2.override
允许 子类的覆盖父类函数的返回类型 是 父类被覆盖函数返回类型 的子类
public class Test2 {
public static void main(String[] args){
P p=new C();
System.out.println(p.get());
}
}
class P{
public Number get(){
return new Integer(0);
}
}
class C extends P{
public Integer get(){
return new Integer(1);
}
}
3.范型不能协变
如果 A 是 B 的超类,则 List<A> 和 List<B> 无关,需要 List<A> 的地方不可以用 List<B> 代替。
public class Test2 {
public static void main(String[] args) {
List<Integer> ints = new ArrayList<Integer>();
//incompatible type
show(ints);
}
static void show(List<Number> ns) {
System.out.println(ns);
}
}
参考:
类型,转换,数组,协变及其他
分享到:
相关推荐
NULL 博文链接:https://capricorn-lu.iteye.com/blog/2348956
数组的协变性来源于数组的一个优势,这篇文章主要给大家介绍了关于Java中数组协变和范型不变性踩坑的一些内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来...
在Java中同样存在逆变与协变,后续我还会写一篇Java逆变协变的文章,有兴趣的朋友可以关注一下。 逆变与协变,听起来很抽象、高深,其实很简单。看下面的代码: class Person { } class Student : Person { } ...
super T> 通配符型变约束,而是采用类似 C# 的 in,out 用于支持协变和逆变,这同时避免了处理子类型化,父类化的问题(即Java泛型中典型的List<T> 不是 List<Object>的子类型的问题); 基本的泛型语法可以...
香 港 则 在 今 年 4月 就 举 行 了 全 岛 的 Java杯 比 赛 ,在 计 算 机界掀 起 了 学 习 Java的热 潮 (尤 其 是 在 大 学 生 们 中 ,出 现 了 一 批 Java迷 )。 有 人 预 言 :Java将 是 网 络 上 的 "世 界 语 ...
java学习资料/笔记整理,含JavaTutorial、Java编程思想、Java编程语言中的类型协变、JAVA快速查询手册、Java数据结构与算法等pdf文档
在面向对象程序设计中,协变返回类型指的是子类中的成员函数的返回值类型不必严格等同于父类中被重写的成员函数的返回值类型,而可以是更"狭窄"的类型
新的JEP Candidate 旨在简化处理Java中复杂的类型变异的概念。这个新的JEP Candidate可能会在Java 10中推出,提供了在定义的泛型类型中指定目标对象默认变异的方法,而不是在泛型... 变异、协变和逆变 以下的代
本代码资源是一个关于Java语言中泛型的讲解案例代码。通过使用实际的示例代码,详细讲解了泛型的定义、用法和优势。 适用人群: 有一定Java编程基础的开发者;对泛型概念感兴趣或希望加深理解的学习者。 使用场景...
实例96 方法改变(协变式返回类型) 251 实例97 静态导入 252 实例98 动物搭配(泛型) 253 实例99 人员信息(枚举类型) 256 实例100 printf()用法 260 实例101 使用ProcessBuilder调用外部命令 263 实例102 ...
全面简介java中的泛型使用方法,和“协变”的内容!
协变返回类型 格式化输出 静态导入 并发实用程序 集合框架增强 下载 () 并解压二进制分发文件Retrotranslator-_n.n.n_-bin.zip ,其中nnn是最新的 Retrotranslator 版本号。 使用 Java 5.0 或 Java 6 编译您的类并将...
泛型实现 参数化类型 的概念,使代码可以应用于多种... 泛型不支持协变 什么是协变?举个例子。 class Fruit{} class Apple extends Fruit{} Fruit[] fruit = new Apple[10]; // OK 子类数组可以赋
第一部分:声明、初始化、和作用域。 定义类、内部类、静态类、接口、枚举。...正确重写和重载方法并识别方法合法的返回值,包括协变返回。 为类及层次类编写构造函数,知道默认构造函数的行为,实例化类及内部类
解释具有通用多态性的语言中协变和逆变的概念(用书面例子),并解释在什么情况下它们的使用是安全的 解释控制反转和依赖注入 什么是 Haskell 中的惰性评估并解释 IO Monads 的精神 学生选择的主题:Java 中的 ...
开发案列优质学习资料资源工具与案列应用场景开发文档教程资料
(调用的是泛型方法)泛型与数组(只有可具体化类型可以创建数组):数组是协变类型 String数组是Object数组的字类型 但是对于list而言,则不是什么是方
返回类型相同或协变 使用 @Overrride 注释的好习惯 解析多个继承方法的规则: 实例方法优于接口默认方法 已经被其他候选者覆盖的方法将被忽略。 您不能使用实例/静态方法覆盖静态/实例方法。 命名约定:小写或驼峰式...
多态(polymorphism) “多态”理解 再论向上转型 多态内部机制 正确使用,私有、静态方法及域与多态关系 构造器-多态 协变的返回类型(Covariant return types) 用继承进行设计(纯继承与扩展、向下转型)