首页 > 解决方案 > 接口中常见默认方法的菱形问题

问题描述

我试图理解为什么下面的程序无法编译。两种默认方法的返回类型在两个接口中都不同。是否应该将它们视为接口 c 中的两种不同方法?

interface a{
    default void log(String str){
        System.out.println("I1 logging::"+str);
    }  
}

interface b {
    default int log(String str){
        System.out.println("I1 logging::"+str);
        return 0;
    }
}

interface c extends a,b{
}

HelloWorld.java:32:错误:类型 b 和 a 不兼容;都定义了 log(java.lang.String),但返回类型不相关接口 c 扩展 a,b{ }

标签: javajakarta-eememory-managementjava-8

解决方案


您的默认实现既不遵循覆盖(维护协变返回类型)也不重载(参数差异)。

请参阅此以获取更多信息:

Java中的协变返回类型

什么是协变返回类型?


推荐阅读