java 反射如何获取父类的字段
时间: 2024-01-26 17:05:08 浏览: 230
Java 反射可以通过以下方式获取父类的字段:
```java
Class<?> superClass = targetClass.getSuperclass(); // 获取目标类的父类
Field[] fields = superClass.getDeclaredFields(); // 获取父类的所有字段
```
其中,`targetClass` 是目标类的 `Class` 对象,`superClass` 是目标类的父类的 `Class` 对象,`fields` 是父类的所有字段数组。使用 `getDeclaredFields()` 可以获取所有的字段,包括私有字段。如果只需要获取公有字段,则可以使用 `getFields()` 方法。如果需要获取指定名称的字段,则可以使用 `getDeclaredField(String name)` 方法或 `getField(String name)` 方法。
需要注意的是,如果父类的字段是私有的,则需要通过 `setAccessible(true)` 方法来设置其可见性,否则在获取其值时会抛出 `IllegalAccessException` 异常。完整代码如下:
```java
public static void main(String[] args) {
ChildClass child = new ChildClass();
Class<?> targetClass = child.getClass();
Class<?> superClass = targetClass.getSuperclass(); // 获取目标类的父类
Field[] fields = superClass.getDeclaredFields(); // 获取父类的所有字段
for (Field field : fields) {
field.setAccessible(true); // 设置私有字段可见
try {
System.out.println(field.getName() + " = " + field.get(child)); // 获取并输出字段的值
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
public static class ParentClass {
private String parentField = "parentValue";
}
public static class ChildClass extends ParentClass {
private String childField = "childValue";
}
```
输出结果为:
```
parentField = parentValue
```
阅读全文