1. 泛型类和子类檫除
/**
* 父类泛型类
* @param <T>
*/
public abstract class Father<T> {
protected T name;
public abstract void eat(T t);
}
/**
* 子类继承父类指定具体类型
* 方法是具体类型,随父类而定
* 属性是具体类型,随父类而定
*/
class Son extends Father<String>{
public void eat(String t) {}
}
/**
* 子类继承父类,父类檫除
* 方法是Object类型,随父类而定
* 属性是Object类型,随父类而定
* @param <T>
*/
@SuppressWarnings("rawtypes")
class OldSon<T> extends Father{
public void eat(Object t) {}
}
/**
* 子类继承父类,父类檫除,子类檫除
* 方法是Object类型,随父类而定
* 属性是Object类型,随父类而定
* @param <T>
*/
@SuppressWarnings("rawtypes")
class LittleSon extends Father{
public void eat(Object t) {}
}
2. 泛型接口和子类檫除
/**
* 接口是泛型接口
* @param <T>
*/
interface Mother<T>{
void cooking(T t);
}
/**
* 子类实现接口指定具体类型
* 方法是具体类型,随父类而定
*/
class Daughter implements Mother<Integer>{
public void cooking(Integer t) {}
}
/**
* 子类实现接口,父类檫除
* 方法是Object类型,随父类而定
*/
@SuppressWarnings("rawtypes")
class OldDaughter<T> implements Mother{
public void cooking(Object t) {}
}
/**
* 子类实现接口,父类檫除,子类檫除
* 方法是Object类型,随父类而定
*/
@SuppressWarnings("rawtypes")
class LittleDaughter implements Mother{
public void cooking(Object t) {}
}