如何从嵌套类访问超类方法?

时间:2010-04-21 20:05:17

标签: java inheritance

我希望这段代码解释了这个问题:

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 个答案:

答案 0 :(得分:16)

Bar.super.a()似乎有效。

JLS section 15.12

  

ClassName。超级NonWildTypeArguments_opt标识符(ArgumentList_opt)

是一个有效的MethodInvocation

答案 1 :(得分:3)

您可以使用Outer.this.method()从外部类调用任何方法。

但是方法在运行时被解析,所以如果你在子类中重写了它,只有子类方法(Bar.a())可以访问原始方法(通过调用super.a())。

正如你可能发现的那样,你不能写Bar.this.super.a() - 但即使你可以,它仍会给你Bar.a(),而不是Foo.a()