メンバーのアクセス制御

この節の要点

  • アクセス修飾子には主にpublicとprivateがある。
  • public修飾子はそのメンバーがインスタンスの外部からアクセスできることを示す。
  • private修飾子はそのメンバーがインスタンスの外部からアクセスできないことを示す。

アクセス修飾子を指定することで、クラスメンバー(クラスフィールドやクラスメソッド)の呼び出しができる範囲(アクセシビリティ)を決めることができます。 アクセス修飾子はいくつか存在しますが、もっぱら次の2つが使われます。

  • public
    • publicが付けられたクラスメンバーは一番呼び出し範囲が広く、インスタンスを作成できれば、取得や呼び出すことができるメンバーを意味します。
  • private
    • privateが付けられたクラスメンバーは一番呼び出し範囲が狭く、同じクラス内のメソッドからのみ、取得や呼び出すことができるメンバーを意味します。

図10に図3のクラスメンバーのフィールドのみprivateにしたプログラムを示します。

public class User {

	private String familyName;
	private String firstName;

	public String getUserName() {

		return familyName + " " + firstName;
	}
}
図10:図1のUserクラスのアクセス修飾子を変更した場合

図10に改変したプログラムの場合、オブジェクトからピリオドを使ってメンバーが呼び出せないことが実行することで分かるはずです。

クラス構造においては、このメンバーに対するアクセス制御を適切に設定することで、変更に強いプログラムを作ることにつながります。

さて、これまでに、Javaのプログラムをいくつか作成してきましたが、クラス内に含まれるmainメソッドや、mainメソッドから呼び出されるメソッドにはすべてstatic修飾子がついていました。 static修飾子をもつメソッドをクラスメソッドと呼びましたが、より一般的に、static修飾子がついたメンバーを静的メンバーと呼びます。図11に静的メンバーの定義例を示します。

静的メンバーおよび静的メソッドの例

図11:静的メンバーおよび静的メソッドの例

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