重複の可能性:
内部クラスに静的メソッドを含めることができないのはなぜですか?
非静的内部クラスオブジェクトの作成には外部クラスオブジェクトが必要であり、作成された非静的内部クラスオブジェクトには、外部クラスのオブジェクトへの非表示の参照が自動的に含まれることを知っています。しかし、なぜ非静的内部クラスに静的メンバーを含めることができないのでしょうか。Javaデザイナは、内部クラスの静的メソッド内の非静的外部クラスフィールドへのアクセスを禁止する必要があります。
内部クラスに静的メンバーを含めることが意味をなさない場合、なぜ内部クラスは静的メンバーを持つクラスを継承することによって静的メンバーを継承できるのでしょうか。
私もこの投稿を読みました。言及されているように:
内部クラスは、宣言していなくても、コンパイル時の定数ではない静的メンバーを継承する場合があります。内部クラスではないネストされたクラスは、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() {
};
}