Okapi Project

アクセス修飾子(あくせす しゅうしょくし)

バージョン
2003 年 06 月 30 日 Ver.1.1
作成者
H.Izumi ( Xware )

目的

呼び出すメソッドや呼ばれるメソッドに制限をかけたい!

アクセス修飾子ってなに?

アクセス修飾子とは、クラスメンバ関数に対してほかのクラスが持つアクセス権を指定するキーワードです。アクセス修飾子をつけることによって、アクセスされることに制限がかかります。

アクセス修飾子の説明

アクセス修飾子には次のようなものがある。

public
すべてのクラス、パッケージからアクセス可能。
protected
同一パッケージ内とサブクラスからアクセス可能。
修飾子なし
同一パッケージ内からアクセス可能。
private
同一クラス内からのみアクセス可能。

アクセス修飾子の使い方

以下は「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);		
    }
}

関連


Copyright © 2003 - 2006 Okapi Project All Rights Reserved.