Java实现多接口报错:Main类从first、second继承不相关的display()默认方法
Java接口默认方法冲突问题说明
你遗漏的核心接口特性
Java 8及以上版本支持接口定义带具体实现的default方法,为了避免多继承的逻辑歧义,Java做了强制约束:当一个类同时实现多个接口,且多个接口存在签名完全相同的默认方法时,实现类必须主动重写该冲突方法,不能直接继承任意一个接口的默认实现,否则编译器会直接抛出你遇到的继承冲突错误。
报错原因
你定义的first和second两个接口都存在同签名的display()默认方法,Main类同时实现这两个接口却没有重写display()方法,编译器无法判断调用object.display()时应该执行哪个接口的默认逻辑,因此直接编译失败。
修复方案
你只需要在Main类中主动重写display()方法即可,若需要保留某个接口的默认实现,可以用接口名.super.方法名()的语法指定调用逻辑,参考代码如下:
public class Main implements first, second { // 重写冲突的display方法 @Override public void display() { // 示例:选择调用first接口的默认实现,也可以自定义全新逻辑,或者同时调用两个接口的实现 first.super.display(); } public static void main(String[] args) { Main object = new Main(); object.display(); } } interface first { default public void display() { System.out.println("This is the display function of interface first"); } } interface second { default public void display() { System.out.println("This is the display function of interface second"); } }
内容的提问来源于stack exchange,提问作者Aditya shukla
相关产品推荐
相关产品推荐

