在JLS
9.4.1中几乎使用您的确切示例来指定此行为,只是更改了一些名称:
interface Top { default String name() { return "unnamed"; }}interface Left extends Top { default String name() { return getClass().getName(); }}interface Right extends Top {}interface Bottom extends Left, Right {}右侧从顶部继承name(),但底部从左侧而不是右侧继承name()。这是因为Left的name()会覆盖Top中的name()声明。
JLS似乎并没有给出我可以看到的任何特别具体的理由。这就是Java设计人员决定继承将起作用的方式。



