web-dev-qa-db-ja.com

protected修飾子はどういう意味ですか?

私は本を​​読んでいます The Java Programming Language、3rd edition

3.5章では、次の単語でprotected修飾子を示しています。

より正確には、クラス自体および同じパッケージ内でのコードへのアクセスを超えて、保護されたメンバーは、クラスと少なくとも同じタイプのオブジェクト参照、つまりクラスのタイプの参照を介してクラスからアクセスすることもできますまたはそのサブタイプの1つ。

言葉は、twoの面で私を混乱させます:

1。保護されたメンバーは、同じパッケージ内のコードでアクセスできますか?私が前に知っていたのは、保護されたメンバーがサブクラスによってのみアクセスできることです...

2。a protected member can also be accessed from ...意味、誰でも私に説明してもらえますか?

27
Leem.fin
  1. はい、protectedメンバーには、クラス自体、クラスのサブクラス、およびクラスの同じパッケージ内のすべてのクラスからアクセスできます(サブクラスであるかどうかは関係ありません)。前の最後の部分を知らなかった場合、新しいことを学んだばかりです。

  2. それは単にそれらのメンバーを使用できることを意味します。メンバーにアクセスできない場合、使用しようとするとコンパイラエラーが発生します。

18
Jesper

Javaでは、protectedは、同じパッケージ内の任意のクラスおよびサブクラスが別のパッケージ内にある場合でも、そのメンバーにアクセスできることを意味します。

A protected variable is not visible outside the package

たとえば、BはAを拡張し、Aにはint xが保護されています。クラスB内で使用できますが、そのインスタンス変数を使用してアクセスすることはできません

11
Hussein Zawawi

1)はい、同じパッケージのクラスから保護されたメンバーにアクセスできます。これが、Javaの仕組みです。

2)これは、サブクラスがそれらにアクセスできることを意味します。

2
Mario Marinato

パブリックとプライベートの間にあると考えてください。パブリッククラスからすべてにアクセスでき、プライベートクラスからはアクセスできません。

0
Jimmt

保護されているメンバーに何からアクセスできるかわからない...意味、だれでも私に説明できますか?

たとえば、同じクラスのオブジェクトAとオブジェクトBがあります。オブジェクトAは、オブジェクトBへの参照を持っている場合、オブジェクトBの保護されたプロパティとメソッドを照会できます。 protected修飾子は、オブジェクトレベルではなく、クラスレベルで適用されます。これはいくつかの状況で役立ちます。

0
ChristopherS

ここに答えがあります

  1. はい。クラスの保護されたメンバー(インスタンス変数とメソッド)は、同じパッケージ内の他のクラスからも、アクセスするメンバーを含むこのクラスを拡張する他のクラスからもアクセスできます。同じ仕様では、前のレベルで許可されたすべてのアクセスを提供するアクセスレベルが厳密に増加しているテーブルも提供されています。private-> package-> protected-> public

  2. クラスXの保護されたメンバー(インスタンス変数/状態およびメソッド/動作)は継承され、Xのサブクラス、たとえばY1、Y2、Y3の一部として表示され、さらに次のレベル、オブジェクト参照タイプXまたはY1、Y2、y3を使用して、その保護されたメンバーにアクセスできます。

0
arunram