1 Java上转型和下转型
Java上转型: 子类引用的对象转为父类,可以实现自动转型;
Java下转型: 父亲类引用的对象转为子类,需要进行强制转换。
首先JDK中的数组也是范型,可以进行类似向上的转型,例如:
Animal[] animals = new Animal[10] ;
animals. = new Dog[10];//Dog 是Animal的子类。
但如下操作却不允许
List<Object> list = new ArrayList<>;
list = new ArrayList<String>();//
2 范型中上下转型
2.1 <? extends T> 实现上转型
2.2 <? super T>实现下转型
3 协变、逆变
对于范型的向上下转型,更专业称呼叫协变和逆变。斜变和逆变在物理中被普遍使用,描述了一个物理量伴随坐标系变化而发生的变化。在Java范型逆变和协变描述了范型中真实类型发生变化后,范型类引用的兼容关系。设A、B确切类型,f(.)表示范型类,A<=B表示A是B的子类,那么存在:
A <=B: f(A) <= f(B);
A<= B: f(A) >= f(B)
同时java范型通配符<?>可以支持范型同时支持逆变和协变:
List<?> list = new ArrayList<Number>();
list = new ArrayList<Integer>();
list = new ArrayList<Object>();