2017-07-14 12 views
0

2つのインターフェイスで同じ名前のメソッドを実装する必要がある場合は、method()が2回呼び出されます。 2つの異なるインターフェースに2つのメソッドが実装されている必要があります。2つのインターフェイスで同じ名前のメソッドを実装する必要がある

public class MainClass implements BarObj.BarInt, FooObj.FooInt{ 

    MainClass(){ 

    } 

    void trigger() 
    { 
     new BarObj(this); 
     new FooObj(this); 
    } 

    @Override 
    public void method() { 
     System.out.println("I DONT KNOW WHICH METHOD"); 
    } 

    public static void main(String[] args) { 
     new MainClass().trigger(); 
    } 
} 

public class BarObj { 
    interface BarInt 
    { 
     void method(); 
    } 
    public BarObj(BarInt _barInt) 
    { 
     _barInt.method(); 
    } 
} 


public class FooObj { 
    interface FooInt 
    { 
     public void method(); 
    } 
    public FooObj(FooInt _fooInt) 
    { 
     _fooInt.method(); 
    } 
} 
+0

私は同じメソッドを含む2つのインターフェイスを持っていても、コンパイラはImplementationクラスのオーバーライドされたメソッドを探します。だから、あなたは区別することはできません。 – Truthira

+2

可能な重複:https://stackoverflow.com/questions/2801878/implementing-two-interfaces-in-a-class-with-same-method-which-interface-method –

+0

2つのクラスを作成し、別のクラスを実装し、両方のオブジェクトを開始するメインクラスを作成します。 – Eliethesaiyan

答えて

0

1つのクラスに同じ名前と同じ引数型と長さのメソッドを2つ持つことはできません。同じ名前のメソッドを持つ2つのインターフェイスを実装する場合は、インターフェイスのメソッドが空で実行されないため、両方のインターフェイスに対して実装されるように動作するメソッドを1つのみにする必要があります。実行されるのは、インターフェイスからオーバーライドされたクラスメソッドです。

1

あなたが次に何をすることができ、あなたの問題を解決しない

しかし、することができます。

  1. それはあなたの詳細についてはgoogleのできる匿名クラスを使用
    void trigger() 
    { 
        new BarObj(new BarObj.BarInt(){ 
         @Override 
         public void method() { 
          System.out.println("NOW I DO KNOW WHICH METHOD"); 
          System.out.println("I'm bar"); 
         } 
        }); 
        new FooObj(new FooObj.FooInt(){ 
         @Override 
         public void method() { 
          System.out.println("NOW I DO KNOW WHICH METHOD"); 
          System.out.println("I'm foo"); 
         } 
        }); 
    } 
    

    次のようにそれが見えるはずですmethod方法
  2. 変更trigger方法

を削除implements BarObj.BarInt, FooObj.FooInt

  • を削除します。

  • +0

    クラスのインターフェイスを使用する私のデザインパターンの名前を忘れました。 –

    +0

    両方の方法の賛否両論について議論することはできますか?私は、メンバが正しいコードを使用していることを知るために最初の行をチェックし、実装されたメソッドを別々に持っていればファイルがきれいに見えるので、インタフェースを使用するとチーム作業に役立つと思いました。しかし、両方のインターフェースが同じ名前(私の質問のようなもの)を使用すると、バグは見つけにくくなります。 –

    +0

    @MingLeungあなたのケースでは、あなたがそれらのインタフェースを使用するという事実は実装の詳細なので、クラスインタフェースの一部であってはなりません。インターフェイスが1つだけであったり、メソッド名が異なる場合でも、クラスに実装するべきではありません。このパターンは、人がメモリを節約しようとしたときに発生し、余分なインスタンスを作成しなかったときに発生現代ではまれです。このクラスのインスタンスのトンを作成する場合のみ。 – talex

    関連する問題