Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 8无法实现两个接口_Java_Java 8_Multiple Inheritance - Fatal编程技术网

由于多重继承,Java 8无法实现两个接口

由于多重继承,Java 8无法实现两个接口,java,java-8,multiple-inheritance,Java,Java 8,Multiple Inheritance,我有两个合同(接口),都有相同名称但不同返回类型的默认方法 我必须创建一个类来实现这两个契约。如果我试图这样做,那么它会给我编译错误 我无法更改Cotract1的默认方法,因为许多类正在实现Contract1,Contract2也是如此 无论如何,我都可以编写一个类,它应该实现两个接口,而不改变接口中的任何内容 下面是一段代码: interface Contract1 { default String getVersion() { return "Beta_10.2.3";

我有两个合同(接口),都有相同名称但不同返回类型的默认方法

我必须创建一个类来实现这两个契约。如果我试图这样做,那么它会给我编译错误

我无法更改Cotract1的默认方法,因为许多类正在实现Contract1,Contract2也是如此

无论如何,我都可以编写一个类,它应该实现两个接口,而不改变接口中的任何内容

下面是一段代码:

interface Contract1 {
    default String getVersion() {
       return "Beta_10.2.3";
    }
    //....
}
interface Contract2 {
    default Double getVersion() {
        return 11.2;
    }
    //....
}
public class ContractsImplementation implements Contract1, Contract2{

}
建议:

Sanjay,如果您不想像您一样在类中有任何默认方法,请使用组合而不是继承

接口合同1{
默认字符串getVersion(){
返回“Beta_10.2.3”;
}
//....
}
接口合同2{
默认双getVersion(){
返回11.2;
}
//....
}
公共类合同{
私有类Contract1Imp实现Contract1{}
私有类Contract2Imp实现Contract2{}
private Contract1 Contract1=新Contract1Imp();
private Contract2 Contract2=新Contract2Imp();
//在这里,你可以随意处理合同
// ...
}

假设您可以这样做。您希望使用哪种方法
ContractsImplementation c=newContractSimplementation();c、 getVersion()
调用?我认为不可能以这种方式实现这两个接口。是否可以将一个接口包装成另一个接口?与contract3接口类似,它实现了contract2,并在默认情况下在另一个方法中调用它??可能是@Pshemo的重复,但这并没有改变Java将具有不同返回类型的方法视为具有相同签名的事实。另外,如果我有一个
ContractsImplementation
类型的变量,并且我调用了
getVersion()
方法,那么编译器在编译时应该采用什么返回类型?当然,如果设计人员以前想得很好,这些问题是可以解决的,但是现在要改变这一点太难了。@Pshemo好吧,在字节码级别上,返回类型是方法签名的一部分,因此您可以在使用不同的JVM语言时解决这个问题。但是,对于Java编程语言,没有解决方案。这个解决方案看起来不错,但我将面临的唯一问题是,我将无法使用
Contract1
Contract2
ref来保存
ContractsImp
对象:
Contract1 obj=newcontractsimp()