我會通過下面的代碼,同時學習Java的本地類定義的本地類中使用的這種超: -在靜態情況下
class A {
protected int one;
}
class Outer {
static void staticMethod(){
class InnerLocal extends A {
double first = this.one;
double second = super.one;
}
}
}
我的疑問是,當我們宣佈本地類內靜方法或靜態初始化塊,然後它們隱式地作爲靜態成員類工作,因爲它們不需要外部類來實例化它們。然而,我知道靜態成員類和靜態局部類(即靜態塊中定義的內部類)之間的明顯區別,問題是Java不允許在靜態上下文中使用對象引用「this」和「super」但上面的代碼完美編譯。
任何人都可以請給我提供Java編譯器不會在上述情況下在靜態上下文中使用'this'和'super'的抱怨的原因嗎?謝謝!:)
因爲你正在定義這個本地類的實例變量。所以'this'將成爲你正在構建的'InnerLocal'的實例。將這兩個設置爲「靜態」來解決您期望的問題。 – AxelH
示例代碼中沒有靜態上下文。 'this'指的是'InnerLocal'的實例,'super'指的是'InnerLocal'實例的'A'部分。 –