Java 速習チュートリアル

Java の修飾子

1. モディファイア(Modifiers)について

これまでの例で、ほぼすべてのプログラムに登場した public というキーワードには既になじみがあるでしょう。

public class Main

この public キーワードはアクセス修飾子(Access Modifier)と呼ばれるもので、クラス、属性(アトリビュート)、メソッド、コンストラクタのアクセスレベルを設定するために使用されます。

Javaのモディファイアは、大きく次の2つのグループに分けられます。

  • アクセス修飾子(Access Modifiers):アクセスレベルを制御します。
  • 非アクセス修飾子(Non-Access Modifiers):アクセスレベルは制御しませんが、その他の機能(継承の禁止や静的メンバの定義など)を提供します。

2. アクセス修飾子(Access Modifiers)

クラス(Classes)に対しては、public または デフォルト(default) のいずれかを使用できます。

モディファイア説明
publicそのクラスは他のどのクラスからもアクセス可能です。
デフォルト (default)同じパッケージ内のクラスからのみアクセス可能です。修飾子を指定しなかった場合に適用されます。詳細は「パッケージ(Packages)」の章で解説します。

属性、メソッド、コンストラクタに対しては、以下のいずれかを使用できます。

モディファイア説明
publicすべてのクラスからアクセス可能です。
private宣言されたクラス内からのみアクセス可能です。
デフォルト (default)同じパッケージ内からのみアクセス可能です。修飾子を指定しない場合に適用されます。
protected同じパッケージ内、およびサブクラス(Subclasses)からアクセス可能です。詳細は「継承(Inheritance)」の章で解説します。

3. Public vs. Private の比較例

以下の例では、クラスに1つの public 属性と1つの private 属性を持たせています。

これを現実世界に例えると以下のようになります。

  • public:公共の公園のようなもので、誰でも立ち入ることができます。
  • private:自宅の鍵のようなもので、自分(そのクラス)しか使えません。

例:

class Person {
  public String name = "John";   // Public - どこからでもアクセス可能
  private int age = 30;          // Private - このクラス内からのみアクセス可能
}

public class Main {
  public static void main(String[] args) {
    Person p = new Person();
    System.out.println(p.name);   // 正常に動作します
    System.out.println(p.age);    // エラー:ageはPersonクラスでprivateアクセスに設定されています
  }
}

このコードを実行しようとすると、private な属性である age にクラス外からアクセスしようとしているため、コンパイルエラーが発生します。これがJavaにおけるカプセル化(情報の隠蔽)の基本となる仕組みです。