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