Javaのpublic, protected, privateとは? アクセス修飾子の使い方

クラスやメソッドの宣言で public や protected、private などの修飾子がつきますが、これらはスコープ(ビジビリティ)といって、参照できる範囲を指定しています。

アクセス修飾子の使い分け

スコープ
修飾子 意味
なし 同じパッケージから参照可能
パッケージ未指定の場合は、同じファイル内に定義したクラスから参照可能
public すべてのクラスから参照可能
protected 同じパッケージか派生クラスから参照可能
private 同一クラスからのみ参照可能
スコープ
なし public protected private
同一クラスからのアクセス
同一パッケージの別クラスからのアクセス
別パッケージの派生クラスからのアクセス
別パッケージのクラスからのアクセス
publicのアクセス範囲
Figure 1. publicのアクセス範囲
アクセス修飾子なしのアクセス範囲
Figure 2. アクセス修飾子なしのアクセス範囲
protectedのアクセス範囲
Figure 3. protectedのアクセス範囲
privateのアクセス範囲
Figure 4. privateのアクセス範囲

public

public class Example {}

publicアクセス修飾子の制約

publicアクセス修飾子を付けたクラスおよびインタフェースは、一つのファイルにひとつしか記述できない。

publicアクセス修飾子を付けたクラスおよびインタフェースの名前とファイル名は一致させる必要がある。たとえば、public アクセス修飾子を付けた Example クラスのファイル名は Example.java とする。

コンストラクタ

クラスのコンストラクタにpublicアクセス修飾子を指定すると、そのクラスにアクセスできる全てのクラスからインスタンスを生成できる。

package com.segakuin.example;

public class Employee {
  public Employee() {
    // initialize
  }
}

クラスのコンストラクタにアクセス修飾子を指定しないと、そのインスタンスは同じパッケージに属するクラスからしか生成できない。コンストラクタをpublicにするためには、クラスにpublicアクセス修飾子を指定するだけではないことに注意すること。

package com.segakuin.example;

public class Employee {
  Employee() {
    // initialize
  }
}

public static void main

Javaの実行プログラムには、次のメソッドが定義されている。

public static void main(String[] args)

それぞれのキーワードは、次の意味を持つ。

mainメソッド
キーワード 意味
public どのクラスからでも参照できる
static このクラスをインスタンス化しなくても呼び出せる
void このメソッドの呼び出し元へ値を返さない
main プログラムを実行するときに最初に呼び出される
String[] 文字列の配列
args プログラムを実行するときに指定された引数が格納されている変数