Java继承:严格的default-abstract和default-default冲突规则

olo*_*ovb 6 java inheritance jls java-8

有人可以解释JLS§8.4.8.4中提到的"严格的默认 - 抽象默认 - 默认冲突规则" .

它们是在JLS中定义的吗?我似乎无法找到他们的定义.

Smi*_*_61 4

我可能是错的,但这就是我解释该部分的方式。

“default-default”和“default-abstract”不是关键字。它们描述了与接口中的默认方法有关的两种不同的编译冲突规则。

“default-default”与实现两个或多个接口的类有关,这些接口提供覆盖等效方法的默认实现,但不提供自己的实现。

“default-abstract”与实现一个提供默认实现的接口和一个或多个不提供覆盖等效方法的默认实现的接口的类有关。

这两条规则的例外是,如果相关类的超类指定了一个重写等效的抽象方法,该方法胜过任何实现接口中的定义。

如果该类从超类继承了具体的重写等效方法或定义了自己的方法,则这些冲突都不适用。