Как получить доступ к методу суперкласса от вложенного класса?

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

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

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

8
задан mik01aj 21 April 2010 в 20:08
поделиться

2 ответа

Bar.super.a () , похоже, работает.

Согласно раздел 15.12 JLS

ClassName. супер . Идентификатор NonWildTypeArguments_opt (ArgumentList_opt)

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

16
ответ дан 5 December 2019 в 08:51
поделиться

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

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

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

3
ответ дан 5 December 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: