クラス階層を調べるとき、Eclipse は保護されたフィールドのアクセスに誤って無効のフラグを立てます。この明らかな矛盾は、保護された修飾子の意図された機能の誤解から生じています。
Java 言語仕様 (JLS) によれば、保護されたメンバーは、宣言しているクラスのパッケージ内およびそのクラスのサブクラスからアクセスできます。サブクラスのパッケージの。この場合、クラス A は保護フィールド protectedInt を宣言します。
指定された例では、クラス C はクラス A を拡張します。これは、C インスタンスが A の protectedInt フィールドにアクセスできる必要があることを意味します。ただし、C で A のインスタンスを使用する場合、Eclipse はアクセスが禁止されていると報告します。
解決策は、保護されたアクセスが宣言クラスのサブクラスに制限されていることを理解することにあります。したがって、A の protectedInt フィールドには、C のインスタンスまたは C のサブクラスによってのみアクセスできます。これは、Eclipse が見落としている重要な違いです。
例として、C のインスタンスを介して protectedInt にアクセスすると、意図したとおりに機能します。
C c = new C(); System.out.println(c.protectedInt); // Access to 'protectedInt' allowed
最終的に、保護された修飾子はフィールドとメソッドへの制御されたアクセスを提供し、カプセル化を維持しながらサブクラスにそれらを継承できるようにします。パッケージ内。
以上がEclipse が Java 継承で保護フィールド アクセスを無効としてフラグを立てるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。