2013-06-17 4 views
19
public interface MyInterface{ 
    public int myMethod(); 
} 


public class SuperClass { 
    public String myMethod(){ 
     return "Super Class"; 
    } 
} 

public class DerivedClass extends SuperClass implements MyInterface { 
    public String myMethod() {...} // this line doesn't compile 
    public int myMethod() {...}  // this is also unable to compile 
} 

それはどのように私はこの問題を解決する必要がありインターフェイスと継承:私は<code>DerivedClass</code>をコンパイルしようとすると、「戻り値の型intに互換性がない」

 
java: myMethod() in interfaceRnD.DerivedClass cannot override myMethod() in interfaceRnD.SuperClass 
    return type int is not compatible with java.lang.String 

私にエラーを与えて?

+2

今では – Xinus

+0

だから '公共の文字列に何か問題が実際にそこにある面白そうmyMethod(){...} '?私の理解から、唯一の問題は直後の行です。私は何か見落としてますか ? – Josay

答えて

21

エラーは、myMethodへの呼び出しが不明確であるという結果に起因します.2つのメソッドのどちらを呼び出す必要がありますか? JLS §8.4.2から:

クラスでオーバーライド-同等のシグネチャを持つ2つのメソッドを宣言するためにコンパイル時エラーです。

メソッドの戻り値の型はシグニチャの一部ではないため、上記の説明に従ってエラーが発生しています。

class DerivedClass implements MyInterface { 

    private SuperClass sc; 

    public String myMethod1() { 
     return sc.myMethod(); 
    } 

    public int myMethod() { 
     return 0; 
    } 

} 
+5

+1 *の方法のための構成を推薦するための+1。 –

+0

私はあなたにarshajiiを手に入れました...ソリューションのために多くのおかげで..私は構成を好むべきです....多くのおかげでagian ... –

+2

+1 –

12

あなたが持つ2つのメソッドを持つことはできません:あなたは単にあなたがこのケースでは、継承を使用することはできません、とcompositionのような代替手段を使用する必要があります、競合メソッドの名前を変更することはできませんと仮定

同じシグネチャであるが異なる戻り値の型。

これは、object.myMethod();を実行したときに呼び出すメソッドをコンパイラが知ることができないためです。

1

メソッドオーバーロードは、パラメータによって区別されます。ここでは、インタフェースとスーパークラスの両方のmyMethod()には、同様のパラメータ署名があります。そうすることはできません。

1

同じシグネチャであるが、異なる戻り値の型を持つ2つのメソッドを持つことはできません。可能であれば、メソッドが呼び出されたときにそれを決定することはできません。

BTWインターフェイスのすべてのメソッドはpublicabstractです。あなたは何ができるか

public interface MyInterface{ 
int myMethod(); 
} 

が、これはと呼ばれる入力パラメータとのインタフェースを持っているoverloading

例:

 public interface MyInterface{ 
     String myMethod(String param); 
     } 
     and in your class 

     public class DerivedClass extends SuperClass implements MyInterface{ 


     public String myMethod(){ ...} 
     public String myMethod(String param) {...} 
     } 
関連する問題