2011-08-16 4 views
19

tengo clase base Foo con el método correo no deseado y la clase Bar que anula correo no deseado. Tengo que llamar a correo no deseado de clase base en el método de un objeto de devolución de llamada que se define en el lugar:Java: Cómo llamar al método de súper clase interna en el lugar

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

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

Este código no está funcionando porque súper se relaciona con devolución de llamada, no Bar clase. ¿Es posible llamar al supermétodo desde el objeto definido en el lugar?

+1

¿Has probado this.Foo.super.span()? – SJuan76

Respuesta

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

EDITAR: Lo siento. No me di cuenta de que los nombres de los métodos son iguales.

+2

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

+1

Estaba seguro de que probé esto enfoque antes de hacer la pregunta, pero Eclipse me dio el error. Parece que no presté atención. Ahora volví a intentarlo. ¡Funciona! ¡Gracias! – Vlad

+0

@AlistairIsrael - Gracias por señalar el error evidente. – Kal

3

Se puede crear una función de contenedor para esto, en Bar

public class Bar... 

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

+1 Para la frase "SuperSpam" – dlev

+0

¿No debería ser mySuperDuperSpam? :) –

2

Prueba esto: Bar.super.spam();

Bar.this.spam(); se compila pero hará que la recursividad infinita porque se llama a la misma correo no deseado() en sí.

+2

Todo el mundo ama un buen desbordamiento de pila. Quiero decir, estamos aquí, después de todo. –

Cuestiones relacionadas