2009-09-25 8 views

Respuesta

13

Puede consultar el exterior con OuterClass.this, o llamar al método con OuterClass.this.method().

Sin embargo, como punto de diseño, compartir el nombre es confuso, por decir lo menos. Sería razonable si la clase interna representara una extensión o, por decir, una implementación concreta de un método abstracto, pero eso sería más claro al llamar a supermétodo. Llamar a un supermétodo directamente (¿como parece que pretendes hacer?) Es confuso.

+0

+1 para "realmente no necesitas nombrarlo de esta manera, ¿o sí?" –

6

Alcance a la clase externa con OuterClass.this.someMethod():

public class OuterClass { 

    public class InnerClass { 

    public void someMethod(int x) { 
     OuterClass.this.someMethod(x); 
    } 
    } 

    public void someMethod(int x) { 
    System.out.println(x); 
    } 
} 
+0

Aw ... Steve B. publicó la misma respuesta justo antes que yo. Dejaré el mío aquí por el código de ejemplo. – SingleShot

1

Cambiar el nombre de la ambigüedad es una buena práctica. Especialmente si lo aplica en la arquitectura hacia arriba y hacia atrás.

+1

Esto no funcionará si la clase está implementando una interfaz. –

Cuestiones relacionadas