如果接口扩展了具有相同默认方法的许多其他接口,会发生什么情况?


precondition:
1.inteface A extended B,C,D;
2.A,B,C,D have same default method : default Object getById(Long Id){...};
user case:
1.class E implements A;
2.class E call default method getById, then which one will be called?

我很困惑。它超出了我的记忆。 ^_^

通常,您会收到有关接口中重复默认方法的错误。

但是,在此特定情况下,将调用子接口A.getByID()中的默认方法,因为子接口A覆盖其超接口中的默认方法。

如果重写类/接口中的默认方法,则该方法将优先于其超接口中的默认方法。

一般情况由 Java 语言规范涵盖。(基本上,这归结为:歧义是编译错误,但类中的抽象方法优先,并消除歧义。

8.4.8.4. 使用覆盖等效签名继承方法

一个类可以继承多个方法 覆盖等效签名 (§8.4.2(。

如果类 C 继承了具体方法,则为编译时错误 其签名与继承的另一个方法等效 由C.

如果类 C 继承默认方法,则为编译时错误 其签名与继承的另一个方法等效 由 C 表示,除非存在超类中声明的抽象方法 的 C 并由 C 继承,与两者覆盖等效 方法。

将调用接口 A 中存在的默认方法,因为它覆盖了其超级接口的行为。

最新更新