Java 16 より前のバージョンでは、非静的内部クラス内で静的メソッドを定義しようとしています内部クラスではコンパイラ エラーが発生します。この制限は、内部クラスとそれを囲むクラス間の固有の関係に起因します。
理由:
非静的内部クラスのインスタンスは、暗黙的にインスタンスに関連付けられています。それを囲んでいるクラスの。これは、内部クラス内のすべてのメソッドが、外側のクラスのインスタンス変数およびメソッドにアクセスできることを意味します。ただし、静的メソッドは特定のインスタンスに属するのではなく、クラス自体に属します。したがって、インスタンス関連のデータやメソッドに直接アクセスすることはできません。
例:
次のコードを考えてみましょう:
<code class="java">public class Foo { class Bar { static void method() {} // Compiler error } }</code>
コンパイラはMethod() メソッドが非静的内部クラス Bar 内で静的として宣言されているため、エラーが発生します。 Bar クラスは静的ではないため、そのインスタンスは Foo のインスタンスに関連付けられます。結果として、method() メソッドは Foo インスタンスから独立して存在することはできません。
静的内部クラス:
対照的に、内部クラスを静的として宣言すると、静的クラスが可能になります。
<code class="java">public class Foo { static class Bar { // now static static void method() {} } }</code>
一方、静的内部クラスは、それを囲んでいるクラスのインスタンスと直接の関連付けを持ちません。これは、そのメソッドがインスタンス固有のデータまたはメソッドにアクセスできないことを意味します。ただし、外側のクラスの静的メンバーには引き続きアクセスできます。
Java 16 :
Java 16 以降では、静的内部クラスと非静的内部クラスの両方で定義できます。静的メソッド。これは、静的メソッドに対する新しい修飾子の導入により、オブジェクト インスタンスから独立して存在できるようになったためです。
以上が非静的内部クラス (Java 16 より前) で静的メソッドを定義できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。