泛型类的继承:
package com.ws.generic; /** * 泛型父类,子类为富二代 * 1、保留父类泛型 -->子类为泛型 * 2、不保留父类泛型 -->子类按需实现 * * 属性及方法 类型 -->随位置而定 * 1)、子类重写方法的类型 -->随父类而定 * 子类新增方法的类型 -->随子类而定 * 2)、子类中使用父类的属性 -->随父类而定 * 子类中使用自己的属性 -->随子类而定 */ abstract class gobj<T1,T2>{ T1 life; public abstract void kill(T2 t); } /* * 全部保留,泛型子类 */ class c1<T1,T2,T3> extends gobj<T1, T2>{ T3 attack; @Override public void kill(T2 t) { // this.age--> T1 System.out.println(t); } public void attck1(T3 t) { System.out.println(t); } } /* * 部分保留,泛型子类 */ class c2<T1> extends gobj<T1, String>{ @Override public void kill(String t) { // this.age--> T1 System.out.println(t); } } /* * 不保留,按需使用 */ class c3 extends gobj<Integer, String>{ @Override public void kill(String t) { // this.age--> Interger System.out.println(t); } } /* * 不指定,擦除 */ class c4 extends gobj{ @Override public void kill(Object t) { // this.age--> Object System.out.println(t); } } public class genericextend { public static void main(String[] args) { c1 cc1 = new c1<Integer, String, Integer>(); cc1.kill("击杀一个小鱼人!"); cc1.attck1(18); c2 cc2=new c2<Integer>(); cc2.kill("又击杀一个小鱼人!"); c3 cc3=new c3(); cc3.kill("第三次击杀一个小鱼人!"); c4 cc4=new c4(); cc4.kill("第四次击杀一个小鱼人!"); } } 接口的继承,与类相同,不同之处在于,接口只有方法能使用泛型: /* * 接口中泛型字符只能使用在抽象方法中,不能使用在全局变量中 * */ interface hero<T>{ void show(T t); } //不指定 class hero1 implements hero{ @Override public void show(Object t) { System.out.println(t); } } //指定 class hero2 implements hero<String>{ @Override public void show(String t) { System.out.println(t); } } //保留 class herodfs<T> implements hero<T>{ @Override public void show(T t) { System.out.println(t); } }