相关疑难解决方法(0)

何时是初始化默认方法的接口?

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

java interface java-8 default-method

92
推荐指数
3
解决办法
6276
查看次数

标签 统计

default-method ×1

interface ×1

java ×1

java-8 ×1