Можно ли вызвать приватный метод в Java извне его класса?

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

Ответ

Непосредственно — нет. Приватный метод (private) доступен только внутри класса, где он объявлен, что является основой инкапсуляции.

Пример корректного вызова внутри класса:

public class Example {
    private void privateMethod() {
        System.out.println("Private method called");
    }
    public void publicMethod() {
        privateMethod(); // Доступ разрешен
    }
}

Обход через рефлексию (не рекомендуется): С помощью Reflection API можно нарушить инкапсуляцию, сделав метод доступным. Это может привести к хрупкости кода, проблемам с безопасностью и обновлениями.

Example obj = new Example();
Method method = Example.class.getDeclaredMethod("privateMethod");
method.setAccessible(true); // Обход проверки доступа
method.invoke(obj);

Вывод: Прямой вызов запрещен. Использование рефлексии возможно, но нарушает принципы ООП и должно применяться с осторожностью (в тестах, фреймворках).