Java反射機制demo(四)—獲取一個類的父類和實現的接口
1,Java反射機制得到一個類的父類
使用Class類中的getSuperClass()方法能夠得到一個類的父類
如果此 Class
表示 Object
類、一個接口、一個基本類型或 void,則返回 null。如果此對象表示一個數組類,則返回表示該 Object
類的 Class
對象。
測試代碼:
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()); } }
運行結果:
Integer的父類是:class java.lang.Number Number的父類是:class java.lang.Object Object的父類是:null
由於Java沒有多繼承,一個類最多只能有一個父類,因此返回類型並不是一個數組。
2,Java反射機制返回一個類實現的接口
當我們開發一個接口,並用一個類去實現它,我們看到某個類,就知道它實現了對應的什么接口,但是機器本身得到一個類時,並不知道它實現的接口是什么樣子。通過反射機制,可以取到某個類實現的接口的Class對象,從而可以探查這個接口內部的結構。
本文中給出了一個簡單的Demo。
首先,接口的定義如下;
package com.aaron.reflect; public interface Animal { public static final String name = "animal"; public String sayHello(String name); }
然后,定義一個類去實現這個接口
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); } }
接口和實現類中都只有一個方法。
測試類的代碼如下:
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); } } }
運行結果:
Dog實現接口:interface com.aaron.reflect.Animal
當然,Java沒有多繼承,但是可以實現多個接口,因此這里返回了一個數組。
需要注意的是:
Class<?>[] getInterfaces()得到的數組中,接口對象順序和這個對象所表示的類中implements子句中接口名的順序,是一致的。