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におけるカプセル化(情報の隠蔽)の基本となる仕組みです。