🔒 アクセス修飾子 (Access Modifiers) の使い方

アクセス修飾子は、クラス、フィールド(変数)、メソッドといったプログラムの要素に対し、どこからアクセス(参照や変更)を許可するかを制御するキーワードです。これにより、オブジェクト指向の重要な概念であるカプセル化(データの保護)を実現します。

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で公開する」**というカプセル化の原則を守ることができます。