Ответ
Доступ к приватному методу можно получить с помощью 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 запрещает операцию. - Нарушает принципы ООП. Используйте только в крайних случаях, например, для модульного тестирования или отладки.