有下面四种情况, 我明白1,2,3 ,不明白4 为什么可以
List<Object> test=new ArrayList<Object>(); // 1 可以
test=new ArrayList<Integer>(); // 2. 不可以
test.add(new Object()); // 3 . 可以
test.add(new Integer(0)); //4 . 可以
说白Integer[]与Object[]不能互转。
而Interger与Object可以强制转化
[code="java"]List test=new ArrayList(); [/code]
定义了test是一个列表,其元素为Object及其子类
[code="java"]test=new ArrayList(); [/code]
此处不能转型为
[code="java"]test.add(new Object());[/code]
test的元素为Object,此处new Object()当然OK
[code="java"]test.add(new Integer(0));[/code]
面象对象的一个基本法则即在父类出现的地方,肯定可以用其子类进行替换。即父类引用指向子类对象。
因为Integer是Object的子类,此处当然OK
1、范型不具有传递性
[b]2、在范型<>中,没有多态,类型必须一致[/b]
3、范型参数如果有两个,类型可以不一致,但容易出问题,会出现运行时异常
4、定义范型可以不使用,不匹配不行,匹配可以
test的内容为Object类型 Integer的父类是Object test当然可以存放Integer类型的的对象
因为一切都是Object