java中可通过class类的getinterfaces()获取类直接实现的接口数组,getsuperclass()获取直接继承的父类;二者均不追溯间接关系,需手动循环遍历构建完整继承树。

Java 中可以通过反射机制获取类实现的接口和继承的父类信息,主要依靠 Class 类提供的几个关键方法。
获取直接实现的接口
使用 getInterfaces() 方法可获取当前类**直接实现**的所有接口(不包括父类实现的接口),返回的是 Class[] 数组。
- 该方法只返回当前类声明时
implements的接口,不会向上追溯父类或父接口 - 如果类没有显式实现任何接口,返回空数组(不是
null) - 示例:
ArrayList.class.getInterfaces()返回[List.class, RandomAccess.class, Cloneable.class, Serializable.class]
获取直接继承的父类
调用 getSuperclass() 方法可获得该类**直接继承的父类**,返回一个 Class 对象。
- 如果类是
Object或是接口(注意:接口不能用此方法查父接口),返回null - 对于普通类,若未显式继承其他类(即默认继承
Object),该方法仍会返回Object.class - 注意:它不返回父类的父类,如需全部继承链,需循环调用
获取所有继承的类与实现的接口(含间接)
反射本身不提供“一键获取完整继承树”的方法,但可以手动遍历:
- 父类链:从当前类开始,反复调用
getSuperclass(),直到返回null - 接口树:对每个类(包括自身及其所有父类)调用
getInterfaces(),再递归获取这些接口的父接口(用getInterfaces()同样适用在接口上) - 实际开发中建议用工具类封装,避免重复逻辑;也可借助
ClassGraph等第三方库简化处理
注意事项与常见误区
使用时要注意几个容易出错的点:
-
getInterfaces()和getSuperclass()都只返回**运行时类型信息**,与编译时声明一致,但无法反映泛型擦除后的原始类型细节 - 接口类型调用
getSuperclass()总是返回null;想查接口继承关系,要用getInterfaces()查其父接口 - 数组类、基本类型、void 类型等特殊
Class对象行为不同,例如int[].class.getSuperclass()返回Object.class
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











