¿Cuándo se inicializa una interfaz con un método predeterminado?

Mientras busca a través de la Especificación del lenguaje Java para responderesta pregunta, He aprendidoese

Antes de que se inicialice una clase, se debe inicializar su superclase directa,pero las interfaces implementadas por la clase no se inicializan. Del mismo modo, las superinterfaces de una interfaz no se inicializan antes de que se inicialice la interfaz.

Para mi propia curiosidad, lo probé y, como era de esperar, la interfazInterfaceType No fue inicializado.

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();
}

Este programa imprime

implemented method

Sin embargo, si la interfaz declara undefault método, entonces ocurre la inicialización. Considera elInterfaceType interfaz dada como

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

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

entonces el mismo programa anterior imprimiría

static initializer  
implemented method

En otras palabras, elstatic el campo de la interfaz se inicializa (paso 9 en el procedimiento detallado de inicialización) y elstatic se ejecuta el inicializador del tipo que se inicializa. Esto significa que la interfaz se inicializó.

No pude encontrar nada en el JLS para indicar que esto debería suceder. No me malinterpreten, entiendo que esto debería suceder en caso de que la clase de implementación no proporcione una implementación para el método, pero ¿y si lo hace? ¿Falta esta condición en la especificación del lenguaje Java? ¿Olvidé algo o lo estoy interpretando mal?

Respuestas a la pregunta(4)

Su respuesta a la pregunta