2010-04-21 54 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()