2011-08-16 11 views
19

w miejscu mam klasę bazową Foo metodą spam i klasa Bar który nadpisuje spamu. Muszę zadzwonić spamu klasy bazowej w sposobie jakiegoś przedmiotu zwrotnego, który jest zdefiniowany w miejscu:Java: Jak wywołać metodę klasy super-od wewnętrznej

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

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

Ten kod nie działa, ponieważ Super jest związane zwrotnego, nie Bar klasa. Czy można wywołać metodę super z obiektu zdefiniowanego w miejscu?

+1

Próbowałeś tego. Foo.super.span()? – SJuan76

Odpowiedz

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

EDIT: Przepraszam. DId nie zdaje sobie sprawy, że nazwy metod są takie same.

+2

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

+1

Byłem pewien, że próbowałem tego podejście przed zadawaniem pytań, ale Eclipse dał mi błąd. Wygląda na to, że byłem nieuważny. Teraz próbowałem. To działa! Dzięki! – Vlad

+0

@AlistairIsrael - Dzięki za wskazanie jaskrawego błędu. – Kal

3

Można utworzyć funkcję otoki dla tego, w barze

public class Bar... 

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

+1 Dla frazy "SuperSpam" – dlev

+0

Czy to nie powinien być mySuperDuperSpam? :) –

2

Spróbuj tego: Bar.super.spam();

Bar.this.spam(); jest kompilowany, ale spowoduje to nieskończoną rekurencję bo nazywasz ten sam spam() sama.

+2

Wszyscy uwielbiają dobry przepełnienie stosu. Przecież jesteśmy tutaj. –

Powiązane problemy