Ответ
Нет, не может. Функциональный интерфейс должен содержать ровно один абстрактный метод (SAM — Single Abstract Method). Согласно спецификации Java, этот метод должен быть публичным — явно или неявно. Приватный метод не удовлетворяет этому требованию, так как он не виден за пределами интерфейса.
Пример ошибки:
@FunctionalInterface
interface MyInterface {
private void doSomething(); // Ошибка компиляции: приватный абстрактный метод
void execute(); // Единственный абстрактный метод
}
Важное уточнение: Начиная с Java 9, в интерфейсах можно объявлять приватные методы, но они должны быть реализованы (default или static). Они служат вспомогательными методами для факторизации кода внутри default-методов и не являются абстрактными.
@FunctionalInterface
interface MyInterface {
void execute(); // Единственный абстрактный метод
default void helper() {
doSomething(); // Вызов приватного метода
}
private void doSomething() { // Допустимо с Java 9
// реализация
}
}