我在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。
答案 0 :(得分:1)
必须给出的东西:单个类不能有两个具有相同名称和参数类型但具有不同返回类型的方法。这包括通过继承获得的方法。
要进行此编译,您可以执行以下操作之一:
Stub
或Printer
中的方法 - 当您访问该类或界面时,这是最合乎逻辑的方法,MyPrinter
继承Stub
,为MyPrinter
提供Stub
类型的成员,并实施{{ 1}} interface,Printer
- 您可以编写Stub
类,该类公开与StubWrapper
相同的方法,但签名为{ {1}}已更改为与Stub
界面中的内容不冲突。现在printValue
可以继承它。答案 1 :(得分:0)
我担心你不能。 Java中的方法通过其签名来标识。签名由方法名称和参数类型组成。返回类型不属于签名,这意味着编译器不能分散两个继承的操作。