Java 泛型
package genericity.gen03; /* * 父类为泛型类 * * 要么同时擦除,要么子类类型 >= 父类类型;不能子类擦除,父类泛型 * 1.属性类型 * 父类中,随父类而定 * 子类中,随子类而定 * 2.方法重写 * 随父类而定 * */ public abstract class Father<T1,T2> { T1 name; public abstract void test(T1 t); } /* * 子类声明时指定具体的父类类型 * 属性类型为具体类型 * 方法同理 */ class Child1 extends Father<String,Integer> { @Override public void test(String t) { name = t; } } /* * 子类为泛型,类型在使用时确定 */ class Child2<T2,T1> extends Father<T1,T2> { @Override public void test(T1 t) { // TODO Auto-generated method stub } } /* * 子类为泛型类,父类不指定类型,泛型的擦除,使用Object替换 * */ class Child3<T1,T2,T3> extends Father { @Override public void test(Object t) { // TODO Auto-generated method stub } } /* * 子类与父类同事擦除 */ class Child4 extends Father { @Override public void test(Object t) { // TODO Auto-generated method stub } } /* * 错误:子类擦除,父类使用泛型 class Child5 extends Father<T1, T2> { @Override public void test(genericity.gen03.T1 t) { // TODO Auto-generated method stub } } */
package genericity.gen03; /* * 泛型接口 * 重写方法随父类而定 * */ public interface Comparable<T> { void test(T t); } //声明子类指定具体类型 class Comp0 implements Comparable<Integer> { @Override public void test(Integer t) { // TODO Auto-generated method stub } } /* * 擦除 * 1.继承或实现声明时不指定类型 * 2.使用时 不指定类型 * 统一以Object类型对待 * 1.编译器警告,使用Object可以消除 * 2.不完全等同于Object */ class Comp1 implements Comparable { @Override public void test(Object t) { // TODO Auto-generated method stub } } //父类擦除,子类泛型 class Comp2<T> implements Comparable { @Override public void test(Object t) { // TODO Auto-generated method stub } } //子类泛型 >= 父类泛型 class Comp3<T> implements Comparable<T> { @Override public void test(T t) { // TODO Auto-generated method stub } } //错误:父类泛型,子类擦除
I don't extravagant hope to change the world, only hope this world will not change me.