我正在浏览一些界面,我想知道为什么这不起作用:
interface I {
public void doSomething(String x);
}
class MyType implements I {
public int doSomething(String x) {
System.out.println(x);
return(0);
}
}
基本上,为什么我不能在界面中实现该方法?有一个返回类型有不同的签名吗?是不是名称,参数和返回类型使方法独特?
答案 0 :(得分:7)
您不能拥有不同的退货类型。想象一下以下
class Foo implements I {
public int doSomething(String x) {
System.out.println(x);
return(0);
}
}
class Bar implements I {
public void doSomething(String x) {
System.out.println(x);
return;
}
}
List<I> l = new ArrayList();
l.add(new Foo());
l.add(new Bar());
for (I i : l) {
int x = i.doSomething(); // this makes no sense for Bar!
}
因此,返回类型也必须相同!
答案 1 :(得分:2)
答案 2 :(得分:1)
方法签名由方法的名称和参数类型组成,因此您不能声明多个具有相同名称和相同数量和类型的参数的方法,因为编译器不能告诉他们。
答案 3 :(得分:0)
考虑接口的典型用法:例如任何实现java List接口的东西都必须实现boolean add(Object o)
调用者可能会做类似的事情:
if (!impl.add(o)) { /* report error */ }
如果您被允许更改返回类型,则会遇到所有类型的问题。
void add(Object o)
if (!impl.add(o)) { // ... your method returns void, so this makes no sense
float add(Object o)
if (!impl.add(o)) { // float to boolean ? are you sure that is what you meant?