2012-04-19 18 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

さらに詳しい説明 –

0

インタフェースの一般的な使い方を考えてみましょう。あなたは、問題のすべてのタイプを打つだろう、あなたは戻り値の型を変更することが許された場合

if (!impl.add(o)) { /* report error */ } 

:JavaのListインタフェースを実装するものは、発信者は、おそらくのような何かをしようとしているboolean add(Object o)

実装する必要があります。

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

同じ名前と引数の同じ数と型を持つ複数のメソッドを宣言することはできませんのでは、メソッドの名前とパラメータの型で構成されていメソッドシグネチャ、コンパイラが言うことができないので、それらを離れて。

関連する問題