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