・ アクセス制御の修飾子

クラス自身、 クラス内のメンバー(フィールド、メソッド、コンストラクタ、innerクラス)は、 必ずいずれかのアクセス制御を受けなければなりません。 アクセス制御のためのキーワードは C++ と同じです。 public, protected, private の3つがあります。 この他に「デフォルトのアクセス制御」という概念があります。 アクセス制御の修飾子を明示的に記述しなかった場合は、 このデフォルトのアクセス制御と見なされます。 つまり Javaには全部で4種類のアクセス制御の状態があるわけです。 それぞれのアクセスの許可のルールを下表にまとめておきましょう。

アクセス制御のキーワードとその許可の範囲
publicproteced指定なしprivate
クラスの内部
同一のパッケージ×
サブクラス××
無関係なクラス×××

上の表からわかるように、 アクセス制御にはパッケージの指定も深く関係しています。 パッケージ文を省略した場合には、 private以外のアクセス制御は public と同じ意味になります。
クラスの外部からメンバーにアクセスする場合、 private や protected で制限を受けるのは、object.x という形式のアクセスです。 たとえば次のような例を考えてみましょう。


public class NewClass {

  private int x;
  public int getX(){ return x; }
}

object.x は許されませんが、getX() メソッドが public なので、 このメソッドを通して値を取り出すことは許されます。 同様に値を設定するメソッドを public で提供することもできます。 あるいは敢えてそれを行わないことで、データ x を「読み出し専用」のデータとして 扱うことも可能となります。