目錄:
通過Class對象可以獲取繼承關系:
- 1.Class getSuperclass():獲取父類類型;(單繼承)
- 2.Class[] getInterfaces():獲取當前類實現的所有接口;(多實現)
- 3.通過Class對象的isAssignableFrom()方法,判斷Class向上轉型是否可以實現。
1.獲取父類類型
public class Main {
public static void main(String[] args) throws Exception {
Class i = Integer.class;
Class n = i.getSuperclass();
System.out.println(n);
Class o = n.getSuperclass();
System.out.println(o);
System.out.println(o.getSuperclass());
}
}
輸出:
class java.lang.Number
class java.lang.Object
null
Integer的父類類型是Number,Number的父類是Object,Object的父類是null。除Object外,其他任何非interface的Class都必定存在一個父類類型。
2.獲取當前類實現的所有接口
public class Main {
public static void main(String[] args) throws Exception {
Class s = Integer.class;
Class[] is = s.getInterfaces();
for (Class i : is) {
System.out.println(i);
}
}
}
輸出Integer實現的接口有:
java.lang.Comparable
java.lang.constant.Constable
java.lang.constant.ConstantDesc
3.判斷Class向上轉型
在非反射調用中,當我們判斷一個實例是否是某個類型時,正常情況下,使用instanceof操作符:
Object n = Integer.valueOf(123);
boolean isDouble = n instanceof Double; // false
boolean isInteger = n instanceof Integer; // true
boolean isNumber = n instanceof Number; // true
boolean isSerializable = n instanceof java.io.Serializable; // true
如果是兩個Class實例,要判斷一個向上轉型是否成立,可以調用isAssignableFrom():
// Integer i = ?
Integer.class.isAssignableFrom(Integer.class); // true,因為Integer可以賦值給Integer
// Number n = ?
Number.class.isAssignableFrom(Integer.class); // true,因為Integer可以賦值給Number
// Object o = ?
Object.class.isAssignableFrom(Integer.class); // true,因為Integer可以賦值給Object
// Integer i = ?
Integer.class.isAssignableFrom(Number.class); // false,因為Number不能賦值給Integer
博客來源:
https://www.liaoxuefeng.com/wiki/1252599548343744/1264804244564000