在泛型中没有向上转型这一概念。
范例1:一个引例。[code=java]package cxy.zy.generic;
public class Test {
public static void main(String[] args) {
Point<Object> p1 = new Point<Object>(12,23);
Point<Integer> p2 = new Point<Integer>(5,2);
p1 = p2; //错误
}
}[/code]假设咱们有一个Ponit类,其内有两个属性x、y 。
在Java中可以将一个Integer对象赋值给一个Object类:
|- Object obj = new Integer(23)
但是在泛型中 使用范例中的代码就是错误的。
|- p1 = p2;
|- 原因很简单:
|- p2是Point<Integer> 类型的引用变量 而不是Integer类型的变量。
|- p1是Point<Object> 类型的引用变量 而不是Object类型的变量。
|- 简单的说 p1和p2不再是简单的Integer、Object类型了 而变成一个复杂的类型了。
|- 因此将一个 Point<Integer>类型的对象赋值给Ponit<Object>类型的变量是错误的。
范例2:WildCard 。[code=java]package cxy.zy.generic;
public class Test {
public static void main(String[] args) {
Point<?> p1 = new Point<Object>(12,23);
Point<?> p2 = new Point<Integer>(5,2);
p1 = p2;
}
}[/code]程序中的“?”表示:
|- p1和p2可以接受任意 Ponit< T > 类型的对象。
|- 注意:不是可以接受任意类型的对象 而是可以接受任意Point<T>类型的对象。
|- 简单地说,只要是Point<T>类型的对象,不论是Point<Object>还是Point<Integer>类型的,都可以被Point<?>所接受。 |