2012-04-19 135 views
0

我期待通过目前的一些接口,我不知道为什么这不起作用:爪哇 - 接口和方法

interface I { 
    public void doSomething(String x); 
} 
class MyType implements I { 
    public int doSomething(String x) { 
     System.out.println(x); 
     return(0); 
    } 
} 

基本上,我为什么不能实现该接口的方法?有一个返回类型有不同的签名?是不是名称,参数和返回类型是什么使方法独特?

回答

2

是的,你基本上是正确的。 Java不允许通过返回类型重载方法,这会很整洁。但是,接口返回类型必须仍然匹配。

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! 
} 

因此,返回类型也必须是相同的!

+0

更多说明! – 2012-04-19 00:41:36

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? 
1

方法签名由方法的名称和参数类型的,所以你不能声明多个方法具有相同的名称和参数的相同数量和类型,因为编译器不能告诉他们分开。