アクセス修飾子は、クラス、フィールド(変数)、メソッドといったプログラムの要素に対し、どこからアクセス(参照や変更)を許可するかを制御するキーワードです。これにより、オブジェクト指向の重要な概念であるカプセル化(データの保護)を実現します。
Javaの主なアクセス修飾子は以下の4種類です。
| 修飾子 | アクセスレベル | 同じクラス内 | 同じパッケージ内 | 継承関係 (別パッケージ) | どこからでも |
public | 最も広い | ⚪︎ | ⚪︎ | ⚪︎ | ⚪︎ |
protected | 広い | ⚪︎ | ⚪︎ | ⚪︎ | ✕ |
| (修飾子なし) | パッケージプライベート | ⚪︎ | ⚪︎ | ✕ | ✕ |
private | 最も狭い | ⚪︎ | ✕ | ✕ | ✕ |
1. private: データの保護(カプセル化の核心)
privateは、宣言された要素へのアクセスをそのクラス内部のみに限定します。外部からの直接的なアクセスを完全に遮断し、カプセル化の中核を担います。
Java
public class Account {
// private: 外部から直接値を読み書きできないようにする
private int balance = 0;
// publicなメソッド(ゲッター)を通してのみ外部に情報を提供する
public int getBalance() {
return this.balance;
}
}
2. public: 外部への公開
publicは、宣言された要素へのアクセスを制限しません。どこからでも(別のパッケージやクラスからでも)自由にアクセス可能です。
- メソッドの中でも、外部から利用してほしい**API(インターフェース)**となるものには、通常
publicをつけます(例:mainメソッドやgetBalanceメソッド)。
3. 修飾子なし (パッケージプライベート / Default)
何も修飾子を付けない場合、それはパッケージプライベート(またはデフォルトアクセス)と見なされます。
- アクセスは、同じパッケージ内に限定されます。異なるパッケージにあるクラスからはアクセスできません。
- クラス内部の処理で、外部に公開する必要はないが、同じパッケージ内の他のクラスと共有したい場合に利用されます。
4. protected: 継承関係の許可
**protected**は、パッケージプライベートの範囲に加えて、別のパッケージに存在するが、そのクラスを継承している子クラスからのアクセスも許可します。
- 継承を通じて機能を引き継ぐ際、親クラスの内部データやメソッドを子クラスでも使いたい場合に利用されます。
これらの修飾子を適切に使うことで、**「オブジェクトの内部で管理すべきデータはprivateで隠蔽し、外部との窓口となるメソッドはpublicで公開する」**というカプセル化の原則を守ることができます。

