Java反射機制demo(四)—獲取一個類的父類和實現的接口


 https://www.cnblogs.com/AaronCui/p/4913642.html

 

1,Java反射機制得到一個類的父類

使用Class類中的getSuperClass()方法能夠得到一個類的父類

如果此 Class 表示 Object 類、一個接口、一個基本類型或 void,則返回 null。如果此對象表示一個數組類,則返回表示該 Object 類的 Class 對象。

測試代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package  com.aaron.reflect;
 
public  class  Demo4 {
     public  static  void  main(String[] args) {
         Class<?> c = Integer. class ;
         System.out.println( "Integer的父類是:" +c.getSuperclass());
         
         c = Number. class ;
         System.out.println( "Number的父類是:" +c.getSuperclass());
         
         c = Object. class ;
         System.out.println( "Object的父類是:" +c.getSuperclass());
     }
}

  運行結果:

1
2
3
Integer的父類是: class  java.lang.Number
Number的父類是: class  java.lang.Object
Object的父類是: null

  由於Java沒有多繼承,一個類最多只能有一個父類,因此返回類型並不是一個數組。

2,Java反射機制返回一個類實現的接口

當我們開發一個接口,並用一個類去實現它,我們看到某個類,就知道它實現了對應的什么接口,但是機器本身得到一個類時,並不知道它實現的接口是什么樣子。通過反射機制,可以取到某個類實現的接口的Class對象,從而可以探查這個接口內部的結構。

本文中給出了一個簡單的Demo。

首先,接口的定義如下;

1
2
3
4
5
6
package  com.aaron.reflect;
 
public  interface  Animal {
     public  static  final  String name =  "animal" ;
     public  String sayHello(String name);
}

  然后,定義一個類去實現這個接口

1
2
3
4
5
6
7
8
9
10
11
12
13
package  com.aaron.reflect;
 
import  java.util.jar.Attributes.Name;
 
public  class  Dog  implements  Animal {
 
     public  final  static  String name =  "dog" ;
     
     @Override
     public  String sayHello(String str) {
         return  String.format( "%s  says : %s" this .name, str);
     }
}

  接口和實現類中都只有一個方法。

測試類的代碼如下:

1
2
3
4
5
6
7
8
9
10
11
package  com.aaron.reflect;
 
public  class  Demo3 {
     public  static  void  main(String[] args) {
         Class<?> c = Dog. class ; //得到Dog對應的Class對象
         Class<?> interfaces[] = c.getInterfaces(); //獲得Dog所實現的所有接口
         for  (Class<?> inte : interfaces) { //打印
             System.out.println( "Dog實現接口:" +inte);
         }
     }
}

 運行結果:

1
Dog實現接口: interface  com.aaron.reflect.Animal

  當然,Java沒有多繼承,但是可以實現多個接口,因此這里返回了一個數組。

需要注意的是:

Class<?>[] getInterfaces()得到的數組中,接口對象順序和這個對象所表示的類中implements子句中接口名的順序,是一致的。

 

 
分類:  Java反射機制
 
 
 
« 上一篇:  Java反射機制demo(三)—獲取類中的構造函數
» 下一篇:  Java反射機制demo(五)—獲得並調用一個類中的方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM