2011-08-16 5 views
19

。私はその場で定義されているいくつかのコールバックオブジェクトのメソッドでは、基本クラスのスパムを呼び出す必要があります:のJava:私は方法<em>スパム</em>とクラス<em>スパム</em>を上書きします<em>バー</em>ではFoo</em>基底クラス<em>を持ってどのように、内側からスーパーメソッドを呼び出すために、インプレースクラス

public class Foo { 
    public void spam() { 
     // ... 
    } 
} 

public class Bar extends Foo { 
    @Override 
    public void spam() { 
     objectWhichRequireCallback(new Callback { 
      @Override 
      public void onCallback() { 
       super.spam(); 
      } 
     }); 
    } 
} 

スーパーコールバックに関連しているので、このコードが動作していない、いないバークラス。インプレースで定義されたオブジェクトからスーパーメソッドを呼び出すことは可能ですか?

+1

これを試しましたか.Foo.super.span()? – SJuan76

答えて

28
public class Bar extends Foo { 
    @Override 
    public void spam() { 
     objectWhichRequireCallback(new Callback { 
      @Override 
      public void onCallback() { 
       Bar.super.spam(); 
      } 
     }); 
    } 
} 

EDIT:申し訳ありません。 DIdはメソッド名が同じであることを認識しません。 Bar.super.spam();

Bar.this.spam();がコンパイルされていますが、同じスパムを呼び出すためには、()自体を無限再帰が発生します。

+2

[StackOverflow](http://stackoverflow.com/questions/7079600/java-how-to-call-super-method-from-inner-in-place-class);-) –

+1

私はこれを試したと確信していました質問をする前にアプローチしていましたが、Eclipseからエラーが出ました。私は慎重ではなかったようです。 今再試行しました。できます!ありがとう! – Vlad

+0

@AlistairIsrael - 眩しいエラーを指摘してくれてありがとう。 – Kal

3

あなたはこれを試してみてくださいバー

public class Bar... 

    public void mySuperSpam(){ 
     super.spam(); 
    } 
+1

+1 "SuperSpam"というフレーズの場合 – dlev

+0

mySuperDuperSpamにする必要はありませんか? :) –

2

で、このためのラッパー関数を作成することができます。

+2

誰もが良いスタックオーバーフローが大好きです。結局、私たちはここにいるのです。 –

関連する問題

 関連する問題