2016-04-13 20 views
2
interface Example{ 
    void methodExample(); 
} 
class Y{ 
    void do(Example x) { } 
} 

class X{ 
    void methodX() { 
    Y y = new Y(); 
    y.do(new Example() { 
     public void methodExample() { 
     System.out.println("methodExample"); 
     } 
    }); 
    } 
} 

メインクラスを作成してmethodExampleを呼び出したいとします。どうすればいい?匿名(内部)クラスでメソッドを呼び出す

+2

関連性はありませんが、注目すべきは: '' 'do'''はキーワードでもあるため、有効な識別子ではありません。 –

答えて

3

あなたのクラスはExampleインタフェースを実装し、void methodExample()は、そのインターフェイス上に存在するので、あなたがする必要があるすべては、そのインターフェースによってオブジェクトを参照し、そのメソッドを呼び出すことですので:

class Y{ 
    public void doIt(Example x) { 
     x.methodExample(); 
    } 
} 

上記の作品を、すべての匿名の実装を含むExampleを実装しているすべてのクラスのオブジェクトは、コンパイル時にmethodExample()を実装するために認識されているためです。あなたは、クラスYへのアクセス権を持っていない場合

1

は、行うための唯一の方法は、匿名の内部クラスを使用して、最初のdoIt()自体をオーバーライドすることで、その後、オーバーライドされたメソッドを呼び出して、例えば:

class X { 
    void methodX() { 
     Y y = new Y() { 
      @Override 
      void doIt(Example x) { 
       x.methodExample(); 
      } 
     }; 
     y.doIt(new Example() { 
      public void methodExample() { 
       System.out.println("methodExample"); 
      } 
     }); 
    } 
} 

public static void main(String[] args) throws Exception { 
    X x = new X(); 
    x.methodX(); 
} 
関連する問題