在繼承中,如果A類繼承了B類,super對應B類,this對應A類。
package cn.test;
import java.lang.reflect.ParameterizedType;
public class Animal<T> {
Class<T> clazz=null;
public Animal() {
//這裏的this.getClass()實際上得到的是子類中的new的類對象,因爲是在子類的構造器中調用的父類構造方法,所以父類構造器中的this指的是當前new的子類對象
System.out.println(this.getClass().getName());
ParameterizedType ptType=(ParameterizedType)this.getClass().getGenericSuperclass(); //獲取當前new的對象的帶有泛型的父類
System.out.println(ptType);
this.clazz=(Class<T>)ptType.getActualTypeArguments()[0]; //獲取第一個泛型參數的真實類型(泛型可能有多個)
System.out.println("clazz--"+clazz);
}
}
下面是子類信息:
public class Dog extends Animal<Dog>{
public Dog() {
super();
}
public static void main(String[] args) {
Dog dog=new Dog();
}
}
執行子類中的main方法,打印結果如下:
cn.itcast.oa.base.Dog
cn.itcast.oa.base.Animal<cn.itcast.oa.base.Dog>
clazz--class cn.itcast.oa.base.Dog