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

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

Ответ

Да, интерфейсы в Java могут содержать константы. Все поля, объявленные в интерфейсе, неявно (по умолчанию) являются public static final, даже если эти модификаторы не указаны явно.

Пример:

interface ApplicationConstants {
    // Эти поля автоматически public static final
    String APP_NAME = "MyApp";
    int MAX_CONNECTIONS = 100;
    double PI = 3.14159;
}

Важные правила:

  1. Обязательная инициализация. Константа должна быть сразу проинициализирована.
    interface MyInterface {
        int VALUE; // ОШИБКА компиляции: = constant expression expected
    }
  2. Соглашение по именованию. Имена констант принято писать в UPPER_SNAKE_CASE.
  3. Наследование. Любой класс, реализующий интерфейс, получает доступ к его константам по имени (например, ApplicationConstants.APP_NAME).

Замечание: Хотя технически это возможно, современные best practices рекомендуют выносить константы в отдельные final-классы (например, AppConfig) или использовать enum, чтобы не «загрязнять» интерфейсы, основная цель которых — определение поведения.