java反射如何获取继承的字段
时间: 2024-02-25 09:54:16 浏览: 129
Java自定义注解使用反射获取字段注解
在Java反射中,可以使用以下两种方式获取继承的字段:
1. 使用Class类的getFields()方法获取当前类及其父类中所有的public字段,返回一个Field类型的数组。这个方法只能获取到public字段。
2. 使用Class类的getDeclaredFields()方法获取当前类中所有的字段,包括private和protected字段,但是不包括父类的字段。如果需要获取父类的字段,可以通过调用父类的Class对象的getDeclaredFields()方法来实现。返回一个Field类型的数组。
下面是一个示例代码,演示如何获取继承的字段:
```
import java.lang.reflect.Field;
public class ReflectionDemo {
public static void main(String[] args) throws Exception {
// 获取子类Class对象
Class<?> childClass = Child.class;
// 获取所有public字段,包括父类的字段
Field[] publicFields = childClass.getFields();
for (Field field : publicFields) {
System.out.println("public field: " + field.getName());
}
// 获取子类声明的所有字段,不包括父类的字段
Field[] declaredFields = childClass.getDeclaredFields();
for (Field field : declaredFields) {
System.out.println("declared field: " + field.getName());
}
// 获取父类声明的所有字段
Class<?> superClass = childClass.getSuperclass();
Field[] superDeclaredFields = superClass.getDeclaredFields();
for (Field field : superDeclaredFields) {
System.out.println("super declared field: " + field.getName());
}
}
}
class Parent {
private String parentField;
public int publicField;
}
class Child extends Parent {
private String childField;
public float publicField2;
}
```
输出结果为:
```
public field: publicField
public field: publicField2
declared field: childField
declared field: parentField
super declared field: parentField
```
阅读全文