Java 继承:严格的默认抽象和默认默认冲突规则

Java inheritance: the strict default-abstract and default-default conflict rules

谁能解释 JLS §8.4.8.4 中提到的 "the strict default-abstract and default-default conflict rules"。

它们是否在 JLS 中定义?我好像找不到他们的定义。

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

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

"default-default" 属于 class 实现两个或多个接口,这些接口提供覆盖等效方法的默认实现,但不提供它自己的实现。

"default-abstract" 属于 class 实现一个提供默认实现的接口和一个或多个不提供覆盖等效方法的默认实现的接口。

这两个规则的例外情况是,如果所讨论的 class 的超级 class 指定了一个抽象方法,该方法与重写等效,它胜过任何实现接口中的定义。

如果 class 从超类 class 继承了一个具体的覆盖等效方法或定义了自己的方法,则 none 这些冲突适用。