呼び出すメソッドや呼ばれるメソッドに制限をかけたい!
以下は「public」と「private」の簡単な使用例です。
public class AccessTest { int age = 0; String name = ""; String displayName = ""; public void setAll(int a, String n) { age = a; name = n; setDisplayName(); } private void setDisplayName() { displayName = name + "さんは" + age + "才です。"; } public void display() { System.out.println(displayName); } }
上記では、「AccessTest」クラスでは3つのメソッドが定義されています。このうち1つは「private」であり、もう2つは「public」です。
setDisplayName メソッドは、他のクラスからは使おうとするとコンパイルエラーとなります。
アクセス修飾子をすべて public にすれば、すべてのクラスで使うことが出来るので便利に感じると思います。それでも private や protected は、上手に使うと大変便利で強力です。
このクラスは、a() メソッドを呼び出すと、b()、c() メソッドがクラス内から呼び出されるクラスです。
public class Test { int a = 0,b = 0,c = 0; // 初期値設定メソッド public void a(){ a = 2; b = 3; this.b(); this.c(); } // 計算メソッド public void b(){ c = a * b; } // 出力メソッド public void c(){ System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); } }
しかし、このクラスを使う人は、a()、b()、c() メソッドを呼び出すことが出来ます。つまり、いきなり c() メソッドを呼び出すことが出来ます。c() メソッドを呼び出すと期待した値でなく、すべて 0 となります。このように不正な順番で呼び出されることをアクセス修飾子を使って防ぐことが出来ます。次のように、アクセスする必要のない、b()、c() メソッドのアクセス修飾子を private にすると、このクラスを使う人が b()、c() を呼び出せなくなるので不正なアクセスの可能性をなくすことが出来ます。
public class Test { int a = 0,b = 0,c = 0; // 初期値設定メソッド public void a(){ a = 2; b = 3; this.b(); this.c(); } // 計算メソッド private void b(){ c = a * b; } // 出力メソッド private void c(){ System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); } }