メンバーのアクセス制御
この節の要点
- アクセス修飾子には主に
publicとprivateがある。public修飾子はそのメンバーがインスタンスの外部からアクセスできることを示す。private修飾子はそのメンバーがインスタンスの外部からアクセスできないことを示す。
アクセス修飾子を指定することで、クラスメンバー(クラスフィールドやクラスメソッド)の呼び出しができる範囲(アクセシビリティ)を決めることができます。 アクセス修飾子はいくつか存在しますが、もっぱら次の2つが使われます。
publicpublicが付けられたクラスメンバーは一番呼び出し範囲が広く、インスタンスを作成できれば、取得や呼び出すことができるメンバーを意味します。
privateprivateが付けられたクラスメンバーは一番呼び出し範囲が狭く、同じクラス内のメソッドからのみ、取得や呼び出すことができるメンバーを意味します。
図10に図3のクラスメンバーのフィールドのみprivateにしたプログラムを示します。
public class User {
private String familyName;
private String firstName;
public String getUserName() {
return familyName + " " + firstName;
}
}
図10に改変したプログラムの場合、オブジェクトからピリオドを使ってメンバーが呼び出せないことが実行することで分かるはずです。
クラス構造においては、このメンバーに対するアクセス制御を適切に設定することで、変更に強いプログラムを作ることにつながります。
さて、これまでに、Javaのプログラムをいくつか作成してきましたが、クラス内に含まれるmainメソッドや、mainメソッドから呼び出されるメソッドにはすべてstatic修飾子がついていました。
static修飾子をもつメソッドをクラスメソッドと呼びましたが、より一般的に、static修飾子がついたメンバーを静的メンバーと呼びます。図11に静的メンバーの定義例を示します。

この静的メンバーは、プログラム中に1つしか存在しないことを保証されたメンバーです。よってnew演算子を使ってオブジェクトを作成せずとも、クラス名.メンバー名で呼び出すことができます。また、静的メンバーはオブジェクトをいくつ作成しても、メモリ上には新たに領域が確保されることはありません。このため、データを共有する際に使われることがありますが、静的フィールドはなるべく使うべきではありません。
なお繰り返しになりますが、静的メンバーは、外部のメンバーを参照する際に、同じ静的メンバーしか参照できません(インスタンスメソッドやフィールドに直接アクセスできません)。