Когда инициализируется интерфейс с методом по умолчанию?

При поиске через спецификацию языка Java, чтобы ответитьэтот вопрос, Я научилсятот

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

Для собственного любопытства попробовал и, как и ожидалось, интерфейсInterfaceType не был инициализирован.

public class Example {
    public static void main(String[] args) throws Exception {
        InterfaceType foo = new InterfaceTypeImpl();
        foo.method();
    }
}

class InterfaceTypeImpl implements InterfaceType {
    @Override
    public void method() {
        System.out.println("implemented method");
    }
}

class ClassInitializer {
    static {
        System.out.println("static initializer");
    }
}

interface InterfaceType {
    public static final ClassInitializer init = new ClassInitializer();

    public void method();
}

Эта программа печатает

implemented method

Однако, если интерфейс объявляетdefault метод, то инициализация происходит. РассмотримInterfaceType интерфейс дан как

interface InterfaceType {
    public static final ClassInitializer init = new ClassInitializer();

    public default void method() {
        System.out.println("default method");
    }
}

тогда та же самая программа выше напечатала бы

static initializer  
implemented method

Другими словами,static поле интерфейса инициализировано (шаг 9 в Подробной процедуре инициализации) иstatic инициализатор инициализируемого типа выполняется. Это означает, что интерфейс был инициализирован.

Я не мог найти что-либо в JLS, чтобы указать, что это должно произойти. Не поймите меня неправильно, я понимаю, что это должно произойти в случае, если реализующий класс не предоставляет реализацию для метода, но что, если он это сделает? Это условие отсутствует в спецификации языка Java, я что-то упустил или неправильно его интерпретирую?

Ответы на вопрос(4)

Ваш ответ на вопрос