2011-08-16 19 views
19

調用超級方法有基類與方法垃圾和類酒吧它覆蓋垃圾。我需要調用一些回調對象的方法基類的垃圾這是就地定義:的Java:我如何從內就地

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(); 
      } 
     }); 
    } 
} 

編輯:對不起。 DId沒有意識到方法名稱是相同的。

+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

試試這個:Bar.super.spam();

Bar.this.spam();被編譯,而是因爲你調用相同的垃圾郵件會造成無窮遞歸()本身。

+2

每個人都喜歡一個很好的堆棧溢出。我的意思是,畢竟我們在這裏。 –