数组是协变的,具体化的
来源:互联网 发布:上海海关数据 编辑:程序博客网 时间:2024/06/05 11:50
数组是协变的,如果Apple是Fruit的子类型,那么数组类型Apple[]就是Fruit[]的子类型,所以这就使得此向上转型是成立的。
Fruit[] apples=new Apple[size];
数组在编译时表示法可能是抽象的,而在运行时表示法往往一定是具体的,包含更多的信息。
Object[] objects=new Fruit[size];Fruit[] apples=new Apple[size];Orange[] oranges=new Orange[size]; eatFruit(oranges);void eatFruit(Fruit someFruit){ ...}这些都是是合法的,也是安全的。因为向上转型总是安全的。
编译时数组是Object的(抽象的),而运行时数组是Fruit(具体的)。
编译时数组是Fruit的(抽象的),而运行时数组是Apple或者Orange(具体的)。
Object类是所有其他类的父类,那么Object数组可以装入任何对象,编译时,向Object数组里装入任何对象都是不受检查的,而在运行时Fruit数组只能装入Fruit对象及其子类。
objects[0]="我是字符串不是水果,我不能放在这里"; // Throws ArrayStoreException
所以上段代码是合法的,但是确实不安全的,会抛出ArrayStoreException异常。
泛型是不可变的:对于任意两个不同的类型Type1与Type2,List<Type1>与List<Type2>不存在继承关系。
泛型在编译时强化它们的类型信息,在运行时丢弃它们的元素类型信息。在运行时,泛型里的元素类型都是Object,所以向List<Long>加入String在运行时是合法的,但是无法通过编译哦。
List<Long> listLong=new ArrayList<Long>(size);listLong.add("5");//不能通过编译哦List list=listLong;list.add("5");//可以加入任何对象哦,只要你进行对的类型转换运行时也不会出错哦
- 数组是协变的,具体化的
- C++ 模板的具体化
- C++ 模板的显示具体化
- C++ 模板的显示具体化
- 产品感的具体化以及培养浅谈
- C++函数模板的显式具体化
- 模板的实例化和具体化
- C++模板的具体化和实例化
- 产品感的具体化以及培养浅谈(转)
- 函数模板和类模板的实例化和具体化
- 函数模板和类模板的实例化和具体化
- 关于模板函数具体化实例化的问题
- C语言拾遗:模版的实例化与具体化
- 显示具体化和模板函数的运用小例题
- C++_模板的实例化与具体化。
- C++函数模板的具体化和实例化
- 函数模板和类模板的实例化和具体化
- 对于具体化的查询结果,不支持该方法
- 把数组排成最小的类
- 使用JavaSocket编写发送TCP请求的工具类
- 机器学习算法
- js/java url转码/解码
- .M文件与MATLAB程序关联
- 数组是协变的,具体化的
- DuiLib——xml配置项
- java经典面试题(3)
- c#泛型初涉
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- 关于send(),recv()函数的理解
- 备份wordpress和数据库
- linux shell实现 tcp 客户端服务端
- 向外国作者要论文的范文