playground

反射

Class

getSuperclass()

该方法用于获得一个类的基类,需要注意的是在编写代码时并不能直接获得基类的类型。以下代码的main()方法中,我们只能把superclass声明为是SubClass的基类,而不能明确指定为SuperClass

public static class SuperClass {
}

public static class SubClass extends SuperClass {
}

public static void main(String[] args) {
    Class<? super SubClass> superclass = SubClass.class.getSuperclass();
    // 若改成 SuperClass superclass = SubClass.class.getSuperclass(); 则编译不通过。
}

isAssignableFrom(Class<?>)

判断一个类是不是另一个类的基类或接口(或者两个类相同)。

public static void main(String[] args) {
    System.out.println(SuperClass.class.isAssignableFrom(SubClass.class)); //true。
    System.out.println(SubClass.class.isAssignableFrom(SuperClass.class)); //false。
}

public static class SuperClass {
}

public static class SubClass extends SuperClass {
}

getMethods()

获取所有public的方法,包括静态方法和从基类中继承过来的方法。

getDeclaredMethods()

获取所有方法,但不包括从基类中继承过来的方法。