Javaインスタンス変数のアクセシビリティ[複製]
-
06-07-2019 - |
質問
この質問にはすでに回答があります:
Javaでの次の変数のアクセシビリティの違いは何ですか?
public class Joe {
public int a;
protected int b;
private int b;
int c;
}
最後の1つが何をしているのかに最も興味があります。
解決
- public:誰でも読み取り/書き込み可能
- protected:読み取り/書き込み可能 サブクラスのインスタンスおよび含まれるパッケージ内から
- プライベート:クラスの任意のインスタンスに対して読み取り/書き込み可能 および内部または外部(囲む)インスタンス
- int c: パッケージプライベート、読み取り/書き込み可能 同じパッケージ内のすべてのクラス
JLS を参照してください。詳細については
編集:同じパッケージ内からアクセスが許可されているという保護されたコメントを追加しました、あなたたちは完全に正しいです。プライベートのコメントも追加しました。今覚えています...;-)
他のヒント
以前の回答の修正に回答して申し訳ありませんが、直接修正する評判がありません...
- public-誰でも読み取り/書き込み可能
- protected-読み取り/書き込み可能 インスタンスのサブクラスとすべてのクラス 同じパッケージ内
- int c:パッケージプライベート、 内部のすべてのクラスに対して読み取り/書き込み可能 同じパッケージ
- private-そのクラス自体のメンバーおよび内部クラス(存在する場合)の読み取り/書き込み可能
アクセス修飾子をこのように、より広いアクセス(パブリック)から最も狭いアクセス(プライベート)の順に並べることをお勧めします。
「保護」にとって特に重要なのは、同じパッケージ内のクラスが(サブクラスだけでなく)クラスの保護されたメンバーにもアクセスできると誤解されることが多いことです。
パッケージレベルのアクセス(最後に言及したアクセス)を完全に回避しようとしています。
クラスを自己完結させておくのが好きです。別のクラスがクラス内の何かにアクセスする必要がある場合、それはパブリックである必要があります(属性ではなくメソッドを使用する必要があります)。そうでなければ、カプセル化、抽象化VS情報隠蔽VSカプセル化で説明されています。
>これらはすべてコンパイル時の保護であり、実行時のリフレクションによって簡単に上書きできます。
所属していません StackOverflow