Как в Java получить доступ к приватному (private) методу класса?

«Как в Java получить доступ к приватному (private) методу класса?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Доступ к приватному методу можно получить с помощью Java Reflection API, обойдя механизм инкапсуляции.

import java.lang.reflect.Method;

class MyClass {
    private void hiddenMethod() {
        System.out.println("Private method executed!");
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        MyClass obj = new MyClass();
        // 1. Получаем объект Method для приватного метода
        Method method = MyClass.class.getDeclaredMethod("hiddenMethod");
        // 2. Снимаем проверку доступа
        method.setAccessible(true);
        // 3. Вызываем метод на целевом объекте
        method.invoke(obj); // Вывод: Private method executed!
    }
}

Ключевые моменты:

  • Используйте Class.getDeclaredMethod(), а не getMethod().
  • setAccessible(true) — критически важный вызов, который подавляет проверки контроля доступа.
  • Это может выбросить SecurityException, если SecurityManager запрещает операцию.
  • Нарушает принципы ООП. Используйте только в крайних случаях, например, для модульного тестирования или отладки.