私は本を読んでいます The Java Programming Language、3rd edition 。
3.5章では、次の単語でprotected
修飾子を示しています。
より正確には、クラス自体および同じパッケージ内でのコードへのアクセスを超えて、保護されたメンバーは、クラスと少なくとも同じタイプのオブジェクト参照、つまりクラスのタイプの参照を介してクラスからアクセスすることもできますまたはそのサブタイプの1つ。
言葉は、twoの面で私を混乱させます:
1。保護されたメンバーは、同じパッケージ内のコードでアクセスできますか?私が前に知っていたのは、保護されたメンバーがサブクラスによってのみアクセスできることです...
2。a protected member can also be accessed from ...
意味、誰でも私に説明してもらえますか?
はい、protected
メンバーには、クラス自体、クラスのサブクラス、およびクラスの同じパッケージ内のすべてのクラスからアクセスできます(サブクラスであるかどうかは関係ありません)。前の最後の部分を知らなかった場合、新しいことを学んだばかりです。
それは単にそれらのメンバーを使用できることを意味します。メンバーにアクセスできない場合、使用しようとするとコンパイラエラーが発生します。
Javaでは、protected
は、同じパッケージ内の任意のクラスおよびサブクラスが別のパッケージ内にある場合でも、そのメンバーにアクセスできることを意味します。
注
A protected variable is not visible outside the package
たとえば、BはAを拡張し、Aにはint xが保護されています。クラスB内で使用できますが、そのインスタンス変数を使用してアクセスすることはできません
1)はい、同じパッケージのクラスから保護されたメンバーにアクセスできます。これが、Javaの仕組みです。
2)これは、サブクラスがそれらにアクセスできることを意味します。
パブリックとプライベートの間にあると考えてください。パブリッククラスからすべてにアクセスでき、プライベートクラスからはアクセスできません。
保護されているメンバーに何からアクセスできるかわからない...意味、だれでも私に説明できますか?
たとえば、同じクラスのオブジェクトAとオブジェクトBがあります。オブジェクトAは、オブジェクトBへの参照を持っている場合、オブジェクトBの保護されたプロパティとメソッドを照会できます。 protected修飾子は、オブジェクトレベルではなく、クラスレベルで適用されます。これはいくつかの状況で役立ちます。
ここに答えがあります
はい。クラスの保護されたメンバー(インスタンス変数とメソッド)は、同じパッケージ内の他のクラスからも、アクセスするメンバーを含むこのクラスを拡張する他のクラスからもアクセスできます。同じ仕様では、前のレベルで許可されたすべてのアクセスを提供するアクセスレベルが厳密に増加しているテーブルも提供されています。private-> package-> protected-> public
クラスXの保護されたメンバー(インスタンス変数/状態およびメソッド/動作)は継承され、Xのサブクラス、たとえばY1、Y2、Y3の一部として表示され、さらに次のレベル、オブジェクト参照タイプXまたはY1、Y2、y3を使用して、その保護されたメンバーにアクセスできます。