1. ホーム
  2. java

[解決済み] なぜ、(非)静的なインナークラスで静的なメソッドを持つことができないのでしょうか(Java 16以前)?

2022-05-14 07:30:30

質問

なぜ非静的な内部クラスで静的なメソッドを持つことができないのでしょうか?

public class Foo {
    class Bar {
        static void method() {} // Compiler error
    }
}

内側のクラスをstaticにすると動作します。なぜでしょうか?

public class Foo {
    static class Bar { // now static
        static void method() {}
    }
}

Java 16+では、この両方が有効です。

どのように解決するのですか?

内部クラスのインスタンスは、暗黙のうちに外部クラスのインスタンスと関連付けられているため、それ自身はいかなる静的メソッドも定義することができません。 静的ネストされたクラスは、その外側のクラスで定義されたインスタンス変数やメソッドを直接参照することができず、オブジェクト参照を通じてのみ使用することができるので、静的ネストされたクラスで静的メソッドを宣言することは安全です。