Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接口中常见默认方法的菱形问题_Java_Jakarta Ee_Memory Management_Java 8 - Fatal编程技术网

Java 接口中常见默认方法的菱形问题

Java 接口中常见默认方法的菱形问题,java,jakarta-ee,memory-management,java-8,Java,Jakarta Ee,Memory Management,Java 8,我试图理解为什么下面的程序不能编译。 两种默认方法的返回类型在两个接口中都不同。 在接口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 log

我试图理解为什么下面的程序不能编译。 两种默认方法的返回类型在两个接口中都不同。 在接口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{
}

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

您的默认实现既不遵循重写(维护共同变量返回类型)也不遵循重载(参数差异)

有关更多信息,请参阅:


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

有关更多信息,请参阅:

根据

两个方法或构造函数,M和N,如果它们 具有相同的名称、相同的类型参数(如有)(§8.4.4),以及, 在使N的形式参数类型适应该类型之后 M的参数,形式参数类型相同

您的接口包含具有相同签名的方法(相同的方法名称和参数类型)

使用声明两个方法是编译时错误 重写类中的等效签名

因此,不能在类中同时实现这两个接口。(实际上,编译器不能仅仅通过返回类型来区分函数)

根据

两个方法或构造函数,M和N,如果它们 具有相同的名称、相同的类型参数(如有)(§8.4.4),以及, 在使N的形式参数类型适应该类型之后 M的参数,形式参数类型相同

您的接口包含具有相同签名的方法(相同的方法名称和参数类型)

使用声明两个方法是编译时错误 重写类中的等效签名

因此,不能在类中同时实现这两个接口。(实际上,编译器不能仅通过返回类型来区分函数)