1. 程式人生 > >泛型繼承

泛型繼承

integer stat 類型 abs () 不能 string 引用 err

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

泛型繼承