标签:
在使用泛型类时,需要了解一些有关继承和子类型的准则。子类继承父类的泛型要么子类和父类都不用泛型,要么子类大于等于父类类型。而属性类型:在父类中,随父类而定,在子类中,随子类而定;重写方法:随父类而定。
package generic; /** * 泛型类继承规则: * 要么同时擦除,要么子类大于等于父类类型 * 1.属性类型 * 在父类中,随父类而定 * 在子类中,随子类而定 * 2.方法重写 * 随父类而定 * @author 堕落梦醒 * * @param <T> */ public abstract class Father<T> { T name; public abstract void test(T name); } /** * 子类声明为具体类型(具体类型大于泛型) * 属性类型为具体类型 * 方法同理 * @author 堕落梦醒 */ class Child1 extends Father<Integer>{ @Override public void test(Integer name) { } } /** * 子类为泛型,类型在使用时确定(子类有两个,大于父类一个) * @author 堕落梦醒 * * @param <T> */ class Child2<T,T1> extends Father<T>{ @Override
//重写的方法随父类 public void test(T name) { } } /** * 子类为泛型,父类不指定类型,使用Object替代(子类一个,父类没有) * @author 堕落梦醒 * * @param <T> */ class Child3<T> extends Father{ @Override public void test(Object name) { } } /** * 子类与父类同时擦除,用Object替代 * @author 堕落梦醒 * */ class Child4 extends Father{ @Override public void test(Object name) { } } /** * 子类擦除,父类泛型,这样是错误的(子类的小于父类) * @author 堕落梦醒 class Child5 extends Father<T>{ @Override public void test(Object name) { } } */
参考资料:尚学堂 java300集视频(117集)
标签:
原文地址:http://www.cnblogs.com/duoluomengxing/p/4699631.html