在初始化类之前,必须初始化其直接超类,但不会初始化类实现的接口.同样,在初始化接口之前,不会初始化接口的超接口.
为了我自己的好奇心,我尝试了它,正如预期的那样,界面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();
}
Run Code Online (Sandbox Code Playgroud)
这个程序打印
implemented method
Run Code Online (Sandbox Code Playgroud)
但是,如果接口声明了default方法,则会发生初始化.考虑InterfaceType给出的接口为
interface InterfaceType {
public …Run Code Online (Sandbox Code Playgroud)