ホームページ > Java > &#&チュートリアル > Java では、別のパッケージ内のサブクラスがそのスーパークラスの保護されたメンバーにアクセスできないのはなぜですか?

Java では、別のパッケージ内のサブクラスがそのスーパークラスの保護されたメンバーにアクセスできないのはなぜですか?

DDD
リリース: 2024-12-08 22:51:11
オリジナル
750 人が閲覧しました

Why Can't a Subclass in a Different Package Access a Protected Member of its Superclass in Java?

Java の保護されたアクセス修飾子をナビゲートする

問題:

package1 の 2 つのクラス A を考えます。および package2 の C (C は A を拡張します)。クラス A はインスタンス変数を定義しますprotectedInt は protected 修飾子を使用して宣言されます。ただし、Eclipse は、クラス C からこの protectedInt にアクセスするとエラーを報告します。これは、他のパッケージからサブクラス内へのアクセスを許可するドキュメントの protected の定義と矛盾しているようです。

答え:

誤解は、保護されたアクセスが許可される特定の状況から生じます。 JLS (セクション 6.6.2) は、保護されたメンバーは実際に他のパッケージのサブクラスからアクセスできるが、そのサブクラスのインスタンスまたはサブクラスのサブクラスのインスタンスに対してのみアクセスできることを明確にしています。

具体的には、保護されたメンバーはフィールド アクセス式 (例: E.Id) またはメソッド呼び出し式 (例: E.Id(. . .)) を介してアクセスされる場合E の型は、サブクラス自体 (つまり、S) または S のサブクラスです。

指定されたシナリオでは、a.protectedInt にアクセスしようとするコードは、A のインスタンスを式 E として使用しています。 A は C のサブクラスではないため、このアクセスは JLS ルールに従って許可されません。

したがって、 protected 修飾子はサブクラス内の保護されたメンバーへのアクセスを許可しますが、サブクラスまたはそのサブクラスのインスタンスのみ。

以上がJava では、別のパッケージ内のサブクラスがそのスーパークラスの保護されたメンバーにアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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