Javaは、反射を使用して子クラスが親クラスのプライベートメソッドを継承しているかどうかを観察します.
2732 ワード
放射線を使用すると、子クラスは親クラスのプライベートメソッド(finalかどうかにかかわらず)を継承していることがわかりますが、直接呼び出すことはできません.しかし、反射によって呼び出すことができます.
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Method;
class Parent {
public Parent() {
System.out.println(" ");
}
private void printParent() {
System.out.println(" ");
}
private static void staticParent() {
System.out.println(" ");
}
private final void finalParent() {
System.out.println(" final ");
}
}
class Child extends Parent {
public void printChild() {
System.out.println(" ");
}
}
public class Test {
public static void main(String[] args) throws Exception {
Class child = Class.forName("Child");
Class parent = child.getSuperclass();
Method[] methods = parent.getDeclaredMethods();
AccessibleObject.setAccessible(methods, true);
for (Method method : methods) {
System.out.println();
System.out.println(" " + method.getName() + "() :");
method.invoke(new Child());
}
}
}
/* :
staticParent() :
printParent() :
finalParent() :
final
*/