Можно ли объявить приватный (private) интерфейс в Java?

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

Ответ

Да, но с важным ограничением.

  • Top-level интерфейс (объявленный в отдельном файле) не может быть private. Это противоречит его назначению — определять публичный контракт.
  • Вложенный (nested) интерфейс внутри класса или другого интерфейса может быть объявлен как private (начиная с Java 9). Такой интерфейс доступен только внутри своего объемлющего класса.

Пример приватного вложенного интерфейса:

public class DataProcessor {
    // Приватный интерфейс, скрытый внутри класса
    private interface InternalValidator {
        boolean validate(String data);
    }

    private class LengthValidator implements InternalValidator {
        @Override
        public boolean validate(String data) {
            return data != null && data.length() > 0;
        }
    }

    public void process(String input) {
        InternalValidator validator = new LengthValidator();
        if (validator.validate(input)) {
            // ... обработка
        }
    }
}
// InternalValidator НЕ доступен вне класса DataProcessor

Применение: Приватные интерфейсы используются для сокрытия внутренней логики и организации кода внутри одного класса.