2010-04-21 4 views
7

J'espère que ce code explique le problème:Comment accéder à une méthode de super-classe à partir d'une classe imbriquée?

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? 
     } 
    } 
} 

Je sais que je peux faire quelque chose de mal, parce que l'héritage peut-être ne doit pas être utilisé de telle manière. Mais c'est le moyen le plus simple dans ma situation. Et, à côté de ça, je suis juste curieux. C'est possible?

Répondre

16

Bar.super.a() semble fonctionner.

par JLS section 15.12

ClassName. super. NonWildTypeArguments_opt Identifier (ArgumentList_opt)

est un MethodInvocation valide

3

Vous pouvez appeler n'importe quelle méthode de la classe externe avec Outer.this.method().

Mais les méthodes sont résolues au moment de l'exécution, donc si vous l'avez surchargé dans votre sous-classe, seule la méthode de sous-classe (Bar.a()) peut accéder à l'original (en appelant super.a()).

Comme vous avez probablement découvert, vous ne pouvez pas écrire Bar.this.super.a() - mais même si vous le pouviez, il vous donnera encore Bar.a(), pas Foo.a().

Questions connexes