Как получить доступ к методу суперкласса из вложенного класса? - PullRequest
7 голосов
/ 22 апреля 2010

Я надеюсь, что этот код объясняет проблему:

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

Я знаю, что я могу делать что-то не так, потому что наследование, возможно, не должно использоваться таким образом.Но это самый простой способ в моей ситуации.И, кроме того, мне просто любопытно.Возможно ли это?

Ответы [ 2 ]

16 голосов
/ 22 апреля 2010

Bar.super.a(), кажется, работает.

за секцию JLS 15.12

ClassName. супер NonWildTypeArguments_opt Identifier (ArgumentList_opt)

является допустимым MethodInvocation

3 голосов
/ 22 апреля 2010

Вы можете вызвать любой метод из внешнего класса с помощью Outer.this.method().

Но методы разрешаются во время выполнения, поэтому, если вы переопределили его в своем подклассе, только метод подкласса (Bar.a()) может получить доступ к оригиналу (вызвав super.a()).

Как вы, вероятно, обнаружили, вы не можете написать Bar.this.super.a() - но даже если бы вы могли, это все равно дало бы вам Bar.a(), а не Foo.a().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...