可能重複:
Why cant we have static method in an inner class?爲什麼非靜態的內部類不能有靜態成員(字段和方法)?
我知道一個非靜態內部類對象的創建需要一個外級對象和所創建的非靜態內部類對象自動具有對外部類的對象的隱藏引用。但爲什麼不能有一個非靜態的內部類有靜態成員? Java設計者不得不禁止在內部類的靜態方法內訪問非靜態外部類的字段,這會更有意義,非?
如果在內部類中有靜態成員沒有意義,爲什麼內部類可以通過繼承具有靜態成員的類來繼承靜態成員?
我也看過這個post。如上所述:
內部類可能會繼承不是編譯時間的靜態成員 常量,即使它們可能不會聲明它們。 不是內部類的嵌套類可以根據 隨Java編程語言的通用規則自由聲明靜態成員。
這是一個約定嗎?
這裏是我的代碼:
public class OuterClass {
private int outerClassField;
public void doSomethingOuterClass() {
outerClassField = 1;
}
public static void doSomethingStaticOuterClass() {
// outerClassField = 2; // Error: Because static method cannot access an specific object's field
}
public class InnerClass extends ClassWithStaticField {
// Error: Why a non-static inner class cannot have static fields ?
// public static int innerClassStaticField = 1;
public void doSomethingInnerClass() {
outerClassField = 3;
staticField = 1;
}
// Error: Why a non-static inner class cannot have static methods ?
// public static void doSomethingStaticInnerClass() {
// outerClassField = 4;
// }
}
public static void main(final String[] args) {
// If it does not make sense to have static members in an inner class, why inner class can inherit statis members by inheriting a class who has static
// members?
OuterClass.InnerClass.staticField = 1;
OuterClass.InnerClass.staticMethod();
}
}
class ClassWithStaticField {
public static int staticField;
public static void staticMethod() {
};
}
另請參閱:http://stackoverflow.com/questions/2482327/why-can-we-have-static-final-members-but-cant-have-static-method-in-an-inner-cla – Autar 2012-07-27 09:19:18