继承泛型类
泛型的应用,包含通配符的理解,泛型继承该注意的点
1 package 泛型; 2 3 public class fanxing<T1,T2> { 4 public T1 age; 5 public T2 name; 6 public static void main(String[] args){ 7 //通配符以及其上下线 8 //通配符仅仅可以用于声明变量或者用于形参 9 //不可用于泛型类、泛型接口、泛型方法 10 son1<?,?> s = new son1<Integer,String>(10, "刘浩宇"); 11 s.hhhh(23,"yangbo"); 12 // 13 } 15 public void test(T2 name){ 17 } 18 } 19 //泛型的继承 20 //1、保留泛型类型 21 //1)全部保留 22 class son1<T1,T2> extends fanxing<T1,T2>{ 23 //当形参为除过T2类型时报错 24 public son1 (T1 age,T2 name){ 25 this.age = age; 26 this.name = name; 27 } 28 public void test(T2 name){ 29 //this.age 为T1 30 } 31 //extends 用于通配符的上限,表示所有继承他的类以及他本身均可以
//泛型方法的应用
32 public <T extends Number,E extends String> void hhhh(T num, E str){ 33 System.out.println(num+"......"+str); 34 } 35 } 36 37 //2)部分保留,要求子类同时保留父类的泛型形参 38 class son2<T1> extends fanxing<T1, String>{ 39 //当形参为除过String类型外军报错 40 public void test(String name){ 41 //this.age 为T1 42 } 43 } 44 //2、不保留泛型类型 45 //1)具体类型 46 class son3 extends fanxing<String,Integer>{ 47 //形参只能为Integer类型 48 public void test(Integer name){ 49 //this.age 为String 50 } 51 } 52 //2)没有类型,成为object类 53 class son4 extends fanxing{ 54 //泛型擦除,没有为其制定泛型形参,默认等同于objec但又不同于object 55 public void test(Integer name){ 56 //this.age 为object 57 } 58 59 } //public son4 extends father<object,object>{},不完全等同于objec,不指定objec则不会进行类型的检查指定了以后则一定会进行检查
总结:
1、泛型子类保留泛型,子类也为泛型类,不保留泛型则按需进行实现;
2、子类方法类型随父类而定
3、子类中使用父类的属性随父类而定
4、子类自己的方法和属性随自己而定
5、通配符只能用来声明变量或形参,不能用于定义泛型接口、泛型方法、泛型类
泛型特点:
泛型没有多态 List<fruit> list = new List<apple>(); 该类型是错误的
泛型没有数组,arraylist 是通过object对象进行操作的,进行值的返回时强制转换为所需的类型
注意;泛型的擦除是指在实现时没有指定任何类型,不完全等同于objec
人真是奇怪,非得走到最后一步,是不会觉悟的。但是到了最后一步,又觉得太晚了。