Обязательно ли явно указывать модификаторы public и abstract для методов в интерфейсе Java?

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

Ответ

Нет, не обязательно. Все методы интерфейса, не помеченные как default или static, являются public abstract по умолчанию, даже если эти модификаторы опущены.

Правила видимости методов в интерфейсе:

  • Обычные методы: Неявно public abstract. Явное указание избыточно, но допустимо.
  • Методы по умолчанию (default): Начиная с Java 8, могут иметь реализацию. Объявляются с ключевым словом default и являются public.
  • Статические методы (static): Начиная с Java 8, могут иметь реализацию. Объявляются с static и являются public.
  • Приватные методы (private): Начиная с Java 9, могут быть private (обычно для выделения общей логики default-методов).

Пример, демонстрирующий эквивалентность:

interface MyInterface {
    // Неявно public abstract (классический абстрактный метод)
    void implicitAbstractMethod();

    // Явно public abstract (полностью эквивалентно строке выше)
    public abstract void explicitAbstractMethod();

    // default метод (Java 8+) - имеет реализацию, public по умолчанию
    default void defaultMethod() {
        System.out.println("Реализация по умолчанию");
    }

    // static метод (Java 8+) - public по умолчанию
    static void staticUtility() {
        System.out.println("Статическая утилита");
    }
}

Стилистическая рекомендация: В современном коде модификаторы public и abstract для обычных методов интерфейса принято опускать для краткости и читаемости.