風行草偃

陪伴,是最长情的告白。

Java 泛型

Saoirse:

一、泛型继承


public abstract class Father<T1,T2> {


}


方式1:保留,泛型子类


1)全部保留


class C1<T1,T2> extends Father<T1,T2> {}


2)部分保留


class C2<T2> extends Father<Integer,T2> {}


方式2:不保留, 按需实现


1)指定具体类型


class C3 extends Father<Integer,String>{}


2)没有类型,擦除 类似于Object


class C4 extends Father {}


注释1:保留父类泛型,子类为泛型子类


注释2:不保留父类泛型,子类按需实现,为非泛型子类


属性及方法的类型,随位置而定:


注释3:子类重写父类的方法,随父类而定;子类中新增方法的类型,随子类而定


注释4:子类中使用父类的属性,随父类而定;子类中使用自己的属性,随子类而定


代码清单1:


public abstract class Father<T1,T2>{
T1 age;

public abstract void test(T2 age);
}

class C1<T1,T2,A,B> extends Father<T1,T2>{

public void test(T2 age) {

    }
}

class C2<T2,A,B> extends Father<Integer,T2>{

public void test(T2 age) {

    }
}

class C3 extends Father<Integer,String> {

public void test(String age) {

    }
}

class C4 extends Father{

public void test(Object age) {

    }
}


泛型接口:规则与泛型类一致,接口只包括常量与公共抽象方法。


二、泛型擦除


泛型的擦除指使用时、继承、实现时,不指定具体类型,类似于Object。


三、通配符 上限(extends) 下限(super)


    1. ? 符号:


    1)通配符,类型不确定,用于声明变量或形参上;


    2)不可用在创建对象,以及创建泛型类 泛型方法 泛型接口上


    2. 上限 extends:


    1)子类约束,一般用于限制操作;


    2)不能使用在添加数据上面,一般用在读取操作;


    3)规则


    class ClassA< T extends ClassB>{


    } 


    方法形式


    public void test(List < ? extends ClassB> list){


    }


    注释1: List <? > list = new ArrayList<ClassB>();


       等同于 List < ? extends Object> list = new ArrayList<ClassB>();


3. 下限 super


    规则:一般用在下限操作


    1)能够添加数据,不能添加父对象;


    List<Apple> list1 = new ArrayList<Apple>();


    test(list1);


    List<Fruit> list2 = new ArrayList<Fruit>();


    test(list2);


    public static void test(List<? super Apple> list){}


四、泛型嵌套


层次结构,一层层分析即可




店铺:https://shop58616120.taobao.com

评论
热度 ( 1 )

© 風行草偃 | Powered by LOFTER