反射中getDeclaredMethods()和getMetho

2020-12-17  本文已影响0人  倚仗听江

在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());
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读