class.getsuperclass() 在以下情况返回 null:object 类、接口、基本类型;数组类型和普通类正常返回父类 class 对象。

Class.getSuperclass() 方法直接返回当前类的直接父类对应的 Class 对象,如果当前类没有父类(如 Object 类)或为接口、基本类型、数组类型,则返回 null。
哪些情况会返回 null?
以下几类情况调用 getSuperclass() 会返回 null:
-
Object.class.getSuperclass()→null(Object是所有类的根父类,无上层父类) -
String.class.getSuperclass()→java.lang.Object.class(正常返回) -
Runnable.class.getSuperclass()→null(接口没有父类,只有getInterfaces()) -
int.class.getSuperclass()→null(基本类型不继承自任何类) -
int[].class.getSuperclass()→java.lang.Object.class(数组类型是Object的子类)
怎么安全获取父类 Class?
为避免空指针,建议先判空再使用:
Class> superClass = clazz.getSuperclass();
if (superClass != null) {
System.out.println("父类名:" + superClass.getName());
} else {
System.out.println("该类没有父类(可能是 Object、接口、基本类型等)");
}
和 getInterfaces()、getGenericSuperclass() 的区别
别混淆这几个方法:
-
getSuperclass():只返回直接继承的**类**(单继承),不包括接口 -
getInterfaces():返回直接实现的所有**接口**(数组形式),适用于类或接口 -
getGenericSuperclass():返回带泛型信息的父类(如List<string></string>),返回Type类型,需强转为ParameterizedType才能取泛型参数
实际例子
假设定义了如下类:
class Animal {}
class Dog extends Animal {}
那么:
-
Dog.class.getSuperclass()→Animal.class -
Animal.class.getSuperclass()→Object.class -
Object.class.getSuperclass()→null
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











