非静的内部クラス (Java 16 より前) で静的メソッドを定義できないのはなぜですか?

Barbara Streisand
リリース: 2024-10-31 11:43:02
オリジナル
858 人が閲覧しました

Why Can't You Define Static Methods in Non-Static Inner Classes (Pre-Java 16)?

非静的内部クラスの静的メソッド (Java 16 より前)

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート