2010-05-11 33 views
98

He implementado una clase anidada en Java, y necesito llamar al método de la clase externa desde la clase interna.Llamar a la función de clase externa desde la clase interna

class Outer { 
    void show() { 
     System.out.println("outter show"); 
    } 

    class Inner{ 
     void show() { 
      System.out.println("inner show"); 
     } 
    } 
} 

¿Cómo puedo llamar al método Outershow?

+0

podemos suponer que su clase interna contiene una instancia de la clase externa? – Eric

+12

@Eric: en java, una instancia de una clase interna no estática SIEMPRE contiene una instancia de la clase externa – newacct

+0

@Eric: ¡eso siempre es cierto en una clase interna Java no estática! –

Respuesta

174

Es necesario prefijar el llamado de la clase externa:

Outer.this.show(); 
+3

Genial. Tengo un seguimiento sobre esto. ¿Cómo puedo llamar a un método en la clase externa desde un lugar totalmente diferente al tener una instancia de clase interna? Inner myInner = new Outer(). New Inner(); ... por ejemplo, si la clase externa tiene un método público getValue(). myInner.getValue() no funcionaría, myInner.Outer.getValue() tampoco. Sé que puedo hacerlo teniendo un método getOwner in Inner y luego llamándolo ... pero ¿necesito ese método? gracias – momomo

+0

Si el exterior es una interfaz, ¿cómo llamar al método abstracto desde la clase interna ...? –

1

Esto debe hacer el truco:

Outer.Inner obj = new Outer().new Inner(); 
obj.show(); 
Cuestiones relacionadas