2010-04-21 60 views
7

我希望这个代码说明问题:如何从嵌套类访问超类方法?

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

我知道,我可能会做一些错误的,因为继承或许不应该以这样的方式使用。但这是我情况最简单的方法。除此之外,我只是好奇。可能吗?

回答

16

Bar.super.a()似乎工作。

JLS section 15.12

类名。超级。 NonWildTypeArguments_opt标识符(ArgumentList_opt)

是一个有效的MethodInvocation

3

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

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

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