2011-08-16 10 views
19

Ho classe base Foo con metodo lo spam e la classe Bar che sostituisce lo spam . Devo chiamare lo spam della classe base del metodo di qualche oggetto di callback che è definito sul posto:Java: come chiamare il metodo eccellente da interno di classe sul posto

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

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

Questo codice non funziona a causa Super è legato alla richiamata, non Bar classe. È possibile chiamare il super metodo dall'oggetto definito sul posto?

+1

Hai provato questo.Foo.super.span()? – SJuan76

risposta

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

EDIT: Mi dispiace. Non ho capito che i nomi dei metodi sono gli stessi.

+2

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

+1

Ero sicuro di aver provato questo approccio prima di fare domande, ma Eclipse mi ha dato errore. Sembra che ero disattento. Ora ho provato. Funziona! Grazie! – Vlad

+0

@AlistairIsrael - Grazie per aver segnalato l'errore eclatante. – Kal

3

è possibile creare una funzione wrapper per questo, a Bar

public class Bar... 

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

+1 Per la frase "SuperSpam" – dlev

+0

Non dovrebbe essere mySuperDuperSpam? :) –

2

Prova questo: Bar.super.spam();

Bar.this.spam(); viene compilato ma causerà una ricorsione infinita, perché si chiama lo stesso dello spam() stesso.

+2

Tutti amano un buon overflow dello stack. Voglio dire, siamo qui, dopo tutto. –

Problemi correlati