泛型繼承
阿新 • • 發佈:2017-11-28
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>{ @Overridepublic 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>{ @Overridepublic 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.泛型嵌套
泛型繼承