package com.whl.gen03;
/**
* 父类为泛型类
* 1.属性
* 2.方法
* 不能子类擦除,父类泛型
* @author Wanghualiang
**/
public abstract class Father<T> {
T name;
public abstract void test(T t);
}
/**
* 子类声明时指定具体类型
* 属性类型为具体类型
* 方法同理
* @author Wanghualiang
*
*/
class Child extends Father<String>{
String t2;
@Override
public void test(String t) {
// TODO Auto-generated method stub
}
}
/**
* 子类为泛型类
* child2<T1> Father<T1>
* child2<T1,T> Father<T1>
* child2<T1,T2> Father<T1,T2>
* child2<T2,T1> Father<T2,T1>
* 以上是对的
* child2<T1> Father<T>
* 是错的
* 子类泛型数要大于等于父类泛型数
* 如果等于,名称要一样,个数要一样,但位置可以不一样
* @author Wanghualiang
*
* @param <T1>
*/
class Child2 <T1,T> extends Father<T1>{
public void test(T1 t) {
// TODO Auto-generated method stub
}
}
/**
* 子类为泛型,父类不指定类型,使用Object替换,泛型的擦除
* @author Wanghualiang
*
* @param <T>
*/
class Child3<T> extends Father{
T name;
@Override
public void test(Object t) {
// TODO Auto-generated method stub
}
}
/**
* 子类与父类同时擦除
* @author Wanghualiang
*
*/
class Child4 extends Father{
String name;//泛型T不能使用了
@Override
public void test(Object t) {
// TODO Auto-generated method stub
}
}
//
要么同 时擦除,要么子类大于等于父类的类型
/**
* 错误:子类擦除,父类使用泛型 * @author Wanghualiang * */class Child5 extends Father<T>{String name;@Overridepublic void test(T t) {// TODO Auto-generated method stub}}*属性:在子类中随子类而定,* 在父类中随父类而定
public abstract class Father<T> {
T name;
public abstract void test(T t);
}
class Child2 <T1,T> extends Father<String>{
Integer name1;
@Override
public void test(String t) {
// TODO Auto-generated method stub
this.name//类型为String
}
}
class Child2 <T1,T> extends Father<String>{
Integer name;
@Override
public void test(String t) {
// TODO Auto-generated method stub
this.name//类型为Integer
}
}
可见父类中的属性与子类中的属性同名则类型会被覆盖掉
*重写方法:*随父类而定,因为子类中的方法是父类方法的实现,父类方法已经有了定义
*如下是错的
*class Child2 <T1,T> extends Father<T1>{
public void test(T t) {
// TODO Auto-generated method stub
}
}
*
*如果父类擦除了,则默认Object类型
*如class Child2 <T1,T> extends Father{
public void test(Object t) {
// TODO Auto-generated method stub
}
}