Java 泛型

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

一、泛型继承

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){}

四、泛型嵌套

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

评论
热度(1)

© Saoirse | Powered by LOFTER