Javaで変数を宣言するとき、「保護」と「アクセス修飾子なし」の違いは何ですか? それは同じですか?
5 に答える
Oracle チュートリアルを実行します。
クラスに修飾子がない場合 (デフォルト、package-private とも呼ばれます)、そのクラスは独自のパッケージ内でのみ表示されます。
protected 修飾子は、メンバーが (package-private と同様に) 独自のパッケージ内でのみアクセスできることを指定し、さらに、別のパッケージ内のそのクラスのサブクラスによってアクセスできることを指定します。
Modifier | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public | Y | Y | Y | Y
————————————+———————+—————————+——————————+———————
protected | Y | Y | Y | N
————————————+———————+—————————+——————————+———————
no modifier | Y | Y | N | N
————————————+———————+—————————+——————————+———————
private | Y | N | N | N
JLS 6.6 :
メンバーまたはコンストラクターがprotected と宣言されている場合、次のいずれかが true の場合にのみアクセスが許可されます。
メンバーまたはコンストラクターへのアクセスは、保護されたメンバーまたはコンストラクターが宣言されているクラスを含むパッケージ内から発生します。
§6.6.2 で説明されているように、アクセスは正しいです。
型が宣言されているパッケージ内からアクセスが発生した場合にのみ許可されるデフォルト アクセスがあると言います。
「パッケージ プライベート」と呼ばれるアクセス修飾子はありません。1 つのパッケージで定義されたすべてのクラスは、同じパッケージで「パッケージ プライベート」として定義されたすべてのものにアクセスできます。
Protected は、保護されたインスタンスを定義するクラスを拡張するすべてのクラスがそのインスタンスにアクセスできることを意味します。
いいえ。デフォルトは Package-Private です。これは、保護されたものとは少し異なります。
デフォルトは、private と protected の中間で、private ほど厳密ではありませんが、protected よりも厳密です。