当一个带有默认方法的接口被初始化?

11 浏览
0 Comments

当一个带有默认方法的接口被初始化?

在搜索Java语言规范以回答这个问题时,我了解到在一个类初始化之前,它的直接超类必须被初始化,但是类实现的接口不会被初始化。同样地,接口在初始化之前不会初始化其超接口。

出于自己的好奇心,我尝试了一下,结果预料之中,接口InterfaceType没有被初始化。

然而,如果接口声明了一个默认方法,则会发生初始化。考虑下面给出的InterfaceType接口:

接口InterfaceType {

public static final ClassInitializer init = new ClassInitializer();

public default void method() {

System.out.println("默认方法");

}

}

那么上面的程序将会打印:

静态初始化程序

实现的方法

换句话说,接口的静态字段被初始化(详细初始化过程中的第9步),并执行正在初始化的类型的静态初始化程序。这意味着接口已经被初始化。

我在Java语言规范中找不到任何表明应该发生这种情况的内容。别误会,我明白如果实现类没有为该方法提供实现,那么应该发生这种情况,但是如果提供了实现呢?这个条件是不是在Java语言规范中遗漏了,还是我理解错了?

0