2016-03-30 25 views
-6

私は、それ自体の内部にインタフェースを宣言するメインクラスがあり、インタフェースを実装する2つの異なるクラス(メインクラスの外で宣言されている)を持っているとします。 inFace、インターフェースInFaceの目的は、ClassMainからimplementMethodを呼び出したときにここで私が何を意味するかの一例であるJavaのインタフェースとの混乱

class ClassMain{ 

     interface InFace{ 
      void implementMethod(); 
     } 

     InFace inFace; 

     public someMethod(){ 
      inFace.implementMethod(); 
     } 
    } 

    //class A implements InFace 

    class A implements InFace{ 
     void implementMethod(){ 
      doSomeOneThing; 
     } 
    } 


    //class B implents InFace 

    class B implements InFace{ 
     void implementMethod(){ 
      doSomeTwoThing; 
     } 
    } 

はどうなりますか? SoSomeOneThingやdoSomeTwoThingを実行する予定ですか?

+2

なぜあなたはそれを実行して見ないのですか?そして、 'inFace.someMethod();'という行は、とにかくコンパイルされません。 –

+0

は急いでいたので、間違いをしました。今編集しました。私はそれの背後にあるコンセプトを知りたい@sᴜʀᴇs –

答えて

0

同じ名前のメソッドで異なる計算を行う共通のClassesは、Interfaceでグループ化できます。

あなたは、彼らがInFaceインターフェイスを実装するため、2つの異なるクラスがリストに追加することができます見ての通り、あなたがInFaceインターフェイス

List<InFace> faces = new ArrayList<Inface>(); 
faces.add(new A()); 
faces.add(new B()); 

のリストを持っていると仮定します。 inFaceがインスタンス化されていないため

faces.get(0).implementMethod(); //class A will run 
faces.get(1).implementMethod(); //class B will run 
1

コードは、NullPointerExceptionがスローされます。

宣言された変数inFaceに実装を割り当てる必要があります。これは、クラスAまたはクラスBの現在の例では

InFace inFace = new A(); 

することができ

、あなたは外からinFaceのカスタマイズを可能にしClassMainにコンストラクタを追加する必要があります。