問題:
2 つのクラス A と C を考えます。ここで、C は A を拡張します。 A は、インスタンス変数を protected int protectedInt = 1 として宣言します。保護されたメンバーは内部でアクセスできるはずであるという期待にもかかわらず、他のパッケージのサブクラスに対して、Eclipse はクラス C の protectedInt へのアクセスを非表示としてフラグを立てます。
答え:
Java protected 修飾子により、独自のパッケージ内のメンバーへのアクセスが許可されます。サブクラスからもアクセスできますが、サブクラスのインスタンスを通じてアクセスが行われた場合に限ります。これは、保護されたアクセスのスコープが、保護されたメンバーが宣言されているクラスではなく、サブクラス型に限定されているためです。
Java 言語仕様 (JLS) によれば、「アクセスはサブクラスの本体内でのみ許可されます」 CのS。」これは、C が A を拡張しても、A のインスタンスから protectedInt への直接アクセスは許可されていないことを意味します。
解決策:
サブクラスの保護されたメンバーにアクセスするには、サブクラス型を使用する必要があります。たとえば、次のコードは有効です:
C c = new C(); System.out.println(c.protectedInt);
この場合、アクセスはサブクラス (C) のインスタンスを通じて行われるため、保護されたメンバーが表示されます。
以上が別のパッケージから Java サブクラスの保護されたメンバーにアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。