接口和继承:“返回类型 int 不兼容”

2022-09-02 09:06:56
public interface MyInterface{
    public int myMethod();
}


public class SuperClass {
    public String myMethod(){
        return "Super Class";
    }
}

public class DerivedClass extends SuperClass implements MyInterface {
    public String myMethod() {...}  // this line doesn't compile 
    public int myMethod() {...}     // this is also unable to compile
}

当我尝试编译时,它会给我错误DerivedClass

java: myMethod() in interfaceRnD.DerivedClass cannot override myMethod() in interfaceRnD.SuperClass
  return type int is not compatible with java.lang.String

我应该如何解决这个问题?


答案 1

该错误是由于对的调用将是不明确的 - 应该调用两种方法中的哪一个?来自 JLS §8.4.2myMethod

在一个类中声明两个具有重写等效签名的方法是一个编译时错误。

方法的返回类型不是其签名的一部分,因此根据上述语句,您将收到错误。

假设您不能简单地重命名冲突的方法,在这种情况下不能使用继承,并且需要使用组合等替代方法:

class DerivedClass implements MyInterface {

    private SuperClass sc;

    public String myMethod1() {
        return sc.myMethod();
    }

    public int myMethod() {
        return 0;
    }

}

答案 2

不能有两个具有相同签名但返回类型不同的方法。

这是因为当您执行 时,编译器无法知道您尝试调用哪个方法。object.myMethod();


推荐