泛型繼承


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.泛型嵌套


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM