2012-01-28 20 views
16

Recientemente, me encontré con un misterioso problema en un proyecto de Android, que describí here. De alguna manera resolví el problema, pero todavía no sé la razón exacta detrás de él.Java: llamando al método de la clase externa en la clase interna anónima

Digamos que quiero llamar a una función foo() en la clase interna. La pregunta es, ¿cuál es la diferencia entre llamar directamente como

foo(); 

o llamándola con la instancia de la clase externa

OuterClass.this.foo(); 

Además, apreciaré si alguien puede comprobar mi última question relacionado con esto, y dame una pista sobre por qué ocurre el error. Muchas gracias.

PD: He leído en alguna parte que la clase interna no estática siempre tendrá una instancia de la clase externa. Entonces llamará a la función externa usando esa instancia si solo uso foo()?

Respuesta

20

Este último es más explícito y le permitirá llamar al método de la clase externa si existe en la clase interna con el mismo nombre.

class OuterClass { 
    void foo() { System.out.println("Outer foo"); } 

    View.OnClickListener mListener1 = new View.OnClickListener() { 
     void foo() { System.out.println("Inner foo"); } 

     @Override public void onClick(View view) { 
      foo(); //Calls inner foo 
      OuterClass.this.foo(); //Calls outer foo 
     } 
    } 

    View.OnClickListener mListener2 = new View.OnClickListener() { 
     @Override public void onClick(View view) { 
      foo(); //Calls outer foo 
      OuterClass.this.foo(); //Calls outer foo 
     } 
    } 
} 
+0

Thx. Pero estoy seguro de que la clase interna no tiene una función con el mismo nombre en mi caso. ¿Hay alguna otra diferencia específica excepto la parte explícita? – Selkie

+0

No en este contexto. Miré su pregunta de fuentes y el hecho de que el cambio que hizo resuelto es inexplicable. Eso no debería haberlo afectado en absoluto. Hacer esto es simplemente para aclarar cualquier ambigüedad en lo que se refiere ... –

+0

tienes razón. Cometí un error allí. ¡Gracias por la iluminación! – Selkie

Cuestiones relacionadas