天天看點

Java反射05-繼承關系本文重點:代碼示範:運作結果:

回顧: Class 對象:在加載類時由 Java 虛拟機以及通過調用類加載器中的 defineClass 方法自動構造的。通過Class執行個體得到類的資訊的手段成為反射

Class對象擷取的三種法法:

//方法一:Class class對象名 = 類名.class
Class cls1 = String.class;

//方法二:Class  class對象名 = 對象.getClass()
String s = "chengyuan";
Class cls2 = s.getClass();

//方法三:Class  class對象名 =  Class.forName("類名");
Class cls3 = Class.forName("java.lang.String");

           

本文重點:

1、擷取父類的Class執行個體

public Class<? super T> getSuperclass()傳回表示此 Class 所表示的實體(類、接口、基本類型或 void)的超類的 Class。如果此 Class 表示 Object 類、一個接口、一個基本類型或 void,則傳回 null。如果此對象表示一個數組類,則傳回表示該 Object 類的 Class 對象。 
        注意:Object是祖宗類,它的父類是null
             Interface是沒有父類的 是以也是null
           

2、擷取目前類的直接實作interface : 接口繼承關系

public Class<?>[] getInterfaces()	确定此對象所表示的類或接口實作的接口。 如果此對象表示一個類,則傳回值是一個數組,
   它包含了表示該類所實作的所有接口的對象。數組中接口對象順序與此對象所表示的類的聲明的 implements 子句中接口名順序一緻。

           

3、判斷一個向上轉型是否成立

public boolean isAssignableFrom(Class<?> cls)	判定此 Class 對象所表示的類或接口與指定的 Class 參數所表示的類或接口是否相同,或是否是其超類或超接口。
           

代碼示範:

public class ReflectionExtend {
    public static void main(String[] args) {
        Class clsFu = Fu.class;
        Class clsZi = Zi.class;

        Class clsSuper = clsZi.getSuperclass();
        System.out.println(clsSuper.getName());

        //測試Object的父類,和接口的父類
        System.out.println(Object.class.getSuperclass());
        System.out.println(Runnable.class.getSuperclass());

        System.out.println("接口的繼承關系=====================");
        Class[] ifs = Integer.class.getInterfaces();
        Class[] ArrIfs = java.util.ArrayList.class.getInterfaces();
        for(Class aIfs :ArrIfs){
            System.out.println(aIfs);
        }

        System.out.println("判斷一個向上轉型是否成立=====================");
        System.out.println(Fu.class.isAssignableFrom(Zi.class));

    }
}
class Fu {

}

class Zi extends Fu{

}
           

運作結果:

Java反射05-繼承關系本文重點:代碼示範:運作結果:

到此為止,java泛型的基礎就完了,更多的應用在開發中再細說。有不足或者錯誤之處,歡迎指出。