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   

*/