在API中关于这两个方法是这么解释的
1:getMethods(),该方法是获取本类以及父类或者父接口中所有的公共方法(public修饰符修饰的)。
2:getDeclaredMethods(),该方法是获取本类中的所有方法,包括私有的(private、protected、默认以及public)的方法。
下面是测试代码
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class People {
public String name;
public Integer age;
public String sex;
private String love;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student extends People {
public String[] subject;
public Integer grade;
private String hobby;
}
@org.junit.Test
public void test1() {
Class<? extends Student> aClass = new Student().getClass();
//获取子类和父类所有的public属性 subject、grade、name、age、sex
Field[] fields = aClass.getFields();
for (Field field : fields) {
System.out.println(field.getName());
}
System.out.println("------------------------------------");
//获取子类自身的所有方法,包括私有属性,但是就无法获取到父类的任何属性了 subject、grade、hobby
Field[] declaredFields = aClass.getDeclaredFields();
for (Field field : declaredFields) {
System.out.println(field.getName());
}
System.out.println("------------------------------------");
Class<?> superclass = aClass.getSuperclass();
//获取父类的public方法 name、age、sex
Field[] superFields = superclass.getFields();
for (Field field : superFields) {
System.out.println(field.getName());
}
System.out.println("------------------------------------");
//获取父类的所有方法 name、age、sex、love
Field[] superDeclaredFields = superclass.getDeclaredFields();
for (Field field : superDeclaredFields) {
System.out.println(field.getName());
}
}
网友评论