继承泛型类

泛型的应用,包含通配符的理解,泛型继承该注意的点
 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

 

posted @ 2017-02-19 20:36  短腿的兔子跑得快  阅读(684)  评论(0编辑  收藏  举报