2010-04-21 19 views
7

espero que este código se explica el problema:¿Cómo acceder a un método de superclase desde una clase anidada?

class Foo { 
    void a() {/*stuff */ } 
} 

class Bar extends Foo { 
    void a() { throw new Exception("This is not allowed for Bar"); } 

    class Baz { 
     void blah() { 
      // how to access Foo.a from here? 
     } 
    } 
} 

Sé que puedo estar haciendo algo mal, porque la herencia tal vez no debe ser utilizado de tal manera. Pero es la forma más fácil en mi situación. Y, además de eso, solo tengo curiosidad. ¿Es posible?

Respuesta

16

Bar.super.a() parece que funciona.

por JLS section 15.12

NombredeClase. súper . NonWildTypeArguments_opt Identificador (ArgumentList_opt)

es un MethodInvocation válido

3

Puede llamar a cualquier método de la clase externa con Outer.this.method().

Pero los métodos se resuelven en tiempo de ejecución, por lo que si lo ha reemplazado en su subclase, solo el método de la subclase (Bar.a()) puede acceder al original (llamando al super.a()).

Como probablemente descubrió, no puede escribir Bar.this.super.a() - pero incluso si pudiera, todavía le daría Bar.a(), no Foo.a().

Cuestiones relacionadas