Java の Protected 修飾子とそのアクセシビリティ制限について
Java の protected アクセス修飾子は、その使用目的に関して混乱を招くことがよくあります。このようなインスタンスの 1 つは、別のパッケージからスーパークラスの保護されたメンバーにアクセスしようとしたときに発生します。
提供された例では、クラス A には、保護されたアクセスで宣言されたインスタンス変数 protectedInt が含まれています。 Oracle のドキュメントによると、保護されたメンバーは、同じパッケージ内、または他のパッケージ内のクラスのサブクラス内でアクセスできる必要があります。ただし、クラス C (クラス A を拡張) が protectedInt にアクセスしようとすると、Eclipse は「A.protectedInt」が表示されないというエラーを報告します。
このエラーの理由は、protected アクセス修飾子の正しい解釈にあります。保護されたアクセスでは、属するパッケージに関係なく、保護されたメンバーを宣言したクラス内で、そのクラスのサブクラス内でのみ使用することが許可されます。
説明するために、次のコード スニペットは意図したとおりに機能します。
C c = new C(); System.out.println(c.publicInt); System.out.println(c.protectedInt);
これは、c の型が A のサブクラスである C のインスタンスであるためです。ただし、c が A のインスタンスである場合、protectedInt へのアクセスは行われません。
この動作は Java 言語仕様 (JLS) セクション 6.6.2 に準拠しており、保護されたメンバーはサブクラス内でのみアクセスでき、アクセスがフィールド アクセスまたはメソッド呼び出し式を介して行われる場合は、オブジェクトのタイプはサブクラスまたはさらなるサブクラスである必要があります。
以上がJava の別のパッケージからスーパークラスの保護されたメンバーにアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。