当一个带有默认方法的接口被初始化?
- 论坛
- 当一个带有默认方法的接口被初始化?
11 浏览
当一个带有默认方法的接口被初始化?
在搜索Java语言规范以回答这个问题时,我了解到在一个类初始化之前,它的直接超类必须被初始化,但是类实现的接口不会被初始化。同样地,接口在初始化之前不会初始化其超接口。
出于自己的好奇心,我尝试了一下,结果预料之中,接口InterfaceType没有被初始化。
然而,如果接口声明了一个默认方法,则会发生初始化。考虑下面给出的InterfaceType接口:
接口InterfaceType {
public static final ClassInitializer init = new ClassInitializer();
public default void method() {
System.out.println("默认方法");
}
}
那么上面的程序将会打印:
静态初始化程序
实现的方法
换句话说,接口的静态字段被初始化(详细初始化过程中的第9步),并执行正在初始化的类型的静态初始化程序。这意味着接口已经被初始化。
我在Java语言规范中找不到任何表明应该发生这种情况的内容。别误会,我明白如果实现类没有为该方法提供实现,那么应该发生这种情况,但是如果提供了实现呢?这个条件是不是在Java语言规范中遗漏了,还是我理解错了?