泛型继承

1.泛型继承

package demo;

/**
 * 泛型继承
 * 1.全保留
 * 2.部分保留
 * 3.具体类型
 * 4.没有类型
 */
/*父类一般定义为抽象类*/
public abstract class Father<T1,T2> {
    T2 name;
    public abstract void test(T1 age); //抽象方法只定义方法,没有方法体
}


//全保留
//子类可以继续添加泛型类型class c1<T1,T2,A,B>    富二代
class c1<T1,T2> extends Father<T1,T2>{
    
    @Override
    public void test(T1 age) {
        //this.name=0;    全保留,不能这样用
        
    }    
}

//部分保留
class c2<T1> extends Father<T1,String>{

    @Override
    public void test(T1 age) {
        //this.name="222";        //引用父类属性,类型随父类而定
    }    
}
//具体类型
class c3 extends Father<Integer,String>{

    @Override
    public void test(Integer age) {
            
    }
}
//没有类型
//泛型擦除
class c4 extends Father{

    @Override
    public void test(Object age) {
        
    }
}

 2.通配符

    <?>(用于变量或形参)

    List<?> list=new ArrayList<String>();

    List<?> list=new ArrayList<Long>();

3.泛型上限

    class Test<T extends Fruit>{ }      //Fruit 有多个子类  <=

    Test的T不能是Fruit的父类,只能用于小于Fruit的子类。

    public static void test(List<? extends Fruit> list) {   }   //方法

    List<? extends Fruit> list=new ArrayList<apple>();

4.泛型下限

  super

    public static void test(List<? super Fruit> list) {   }   //方法

    假如Fruit没有其他父类,用的类型定义只能Object.

5.泛型嵌套

原文地址:https://www.cnblogs.com/yugeng/p/7909198.html