实现父类中存在的方法时的问题

时间:2018-03-09 11:03:43

标签: java

我在IBM WSDL2Java的上下文中面临一个问题,但让我用简单的例子来描述。

Class Stub {
    void printValue(String val){
       System.out.println(val);
    }
}

Interface Printer {
    boolean printValue(String val) throws Exception;
} 

Class myPrinter extends Stub implements Printer{
    boolean printValue(String val) throws Exception{
    //Implementation here
    }
} 
由于返回类型错误不兼容,

myPrinter类现在无法编译。这是因为编译器优先使用父类方法,这种方法很好且合乎逻辑。 但是我想知道如何在不触及Stub类和Printer接口的情况下使myPrinter类有效,同时在我的类中实现接口的printValue。

2 个答案:

答案 0 :(得分:1)

必须给出的东西:单个类不能有两个具有相同名称和参数类型但具有不同返回类型的方法。这包括通过继承获得的方法。

要进行此编译,您可以执行以下操作之一:

  • 重命名StubPrinter 中的方法 - 当您访问该类或界面时,这是最合乎逻辑的方法,
  • 将继承替换为撰写 - 而不是从MyPrinter继承Stub,为MyPrinter提供Stub类型的成员,并实施{{ 1}} interface,
  • 使用重命名的方法包裹Printer - 您可以编写Stub类,该类公开与StubWrapper相同的方法,但签名为{ {1}}已更改为与Stub界面中的内容不冲突。现在printValue可以继承它。

答案 1 :(得分:0)

我担心你不能。 Java中的方法通过其签名来标识。签名由方法名称和参数类型组成。返回类型不属于签名,这意味着编译器不能分散两个继承的操作。