Что выведет в консоль следующий код?

package question;

import java.lang.reflect.Method;


class Test {

    public void methodPublic() {
        System.out.println("Test.methodPublic");
    }

    protected void methodProtected() {
        System.out.println("Test.methodProtected");
    }

    private void methodPrivate() {
        System.out.println("Test.methodPrivate");
    }
}

public class PrivateTest {

    public static void main(String[] args) throws Exception {
        Test test = new Test();
        callMethods(test, "methodPublic");
        callMethods(test, "methodProtected");
        callMethods(test, "methodPrivate");
    }


    static void callMethods(Object a, String methodName) throws Exception {
        Method m = a.getClass().getDeclaredMethod(methodName);
        m.setAccessible(true);
        m.invoke(a);
    }

}

Explanation
Рефлексия позволяет вызвать все методы, даже приватные. Зная имя метода, можно вызвать setAccessible(true) для объекта Method, чтобы сделать возможным его вызов, как видно из реализации callMethods.

Слідкуй за CodeGalaxy

Мобільний додаток Beta

Get it on Google Play
Зворотній Зв’язок
Продовжуйте вивчати
тести з Java
Cosmo
Зареєструйся Зараз
або Підпишись на майбутні тести