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


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子句中接口名的順序,是一致的

 


免責聲明!

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



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