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

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

Ответ

Нет, интерфейсы в Java не могут содержать конструкторы.

Почему?

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

Пример ошибки:

interface MyInterface {
    // Ошибка компиляции: Interface abstract methods cannot have body
    // MyInterface() {}
}

Альтернатива (с Java 8): Для создания объектов, соответствующих интерфейсу, можно использовать статические фабричные методы внутри самого интерфейса:

interface MyInterface {
    static MyInterface createDefaultInstance() {
        return new MyInterface() {
            // реализация анонимного класса
        };
    }
}
// Использование:
MyInterface instance = MyInterface.createDefaultInstance();