第十三章 
 〜クラス編〜
 アクセス修飾子
 アクセス修飾子というのは、簡単に言ってしまうですと、変数やメソッドに対して
アクセスできるかどうかを決める修飾子です。例えば次のサンプルを見て欲しいです。
サンプルプログラム13_1
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
class Rei13_1{
    public static void main(String[] args){
        GoukeiKeisan gk = new GoukeiKeisan();

        gk.sum(5, 10);
        int kotae = gk.getAns();
        System.out.println("5〜10までの和は" + kotae + "です");
    }
}

class GoukeiKeisan{
    int ans;

    void sum(int a, int b){
        ans = 0;
        for(int i=a; i<=b; i++){
            ans += i;
        }
    }
    
    int getAns(){
        return ans;
    }
}

 このプログラムは前章でやったサンプルプログラムですね!けしてここ最近のサンプ
ルプログラムは手抜きをしているなんて思わないでくださいです。実はこのプログラム
にはちょっと欠点があったのです。 それはsum()メソッドを呼んで計算をした後にこの
クラスのans変数の値を変えてしまったらどうなるですかね? きっと答えが書き換えら
れてしまうと思うです。それでは困るですね!今の説明をそのまんま表すと・・・
gk.sum(5, 10);を行ったあとにgk.ans=100;を行うような処理をすることです。
 そこで今回説明で少しでてきたアクセス修飾子というのを使うです。アクセス修飾子
は大きく分けて3つあるです〜。(指定無を入れると4つ)

アクセス修飾子一覧
名前 説明
public すべてのクラスからアクセスできる
private 自分自身(宣言を行ったクラス内)からしかアクセスできない
protected 同じパッケージからのクラスとサブクラスからアクセスできる
指定無 同じパッケージからのみアクセスできる

 パッケージと言うのは何度か出てきたと思うですが、クラスが集まった物です〜ここ
では余り深くはやらないです。パッケージについてはいずれやるです。サブクラスとい
うのもここではやらないです。ここでのアクセス修飾子はメソッドフィールドに指定
するときに使われるアクセス修飾子です〜
 そしてRei10_4_1でアクセスされてしまって困ると書いたですね!つまり変数ansに対
して使うアクセス修飾子はprivateを使えばいいですね!これを使えば他からアクセス
できなくなるです。具体的な使い方は次のようになるです。
  フィールドの場合:アクセス修飾子 変数名;
  メソッドの場合: アクセス修飾子 戻り値 メソッド名(引数){}
  例:private int ans;
   public int sum(int a, int b){}
   private void sub(){}
 ようするに最初にアクセス修飾子を書けばいいんですね!
 では、さっきのプログラムをアクセス修飾子を使って書いてみたいと思うです〜
サンプルプログラム13_2
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
class Rei13_2{
    public static void main(String[] args){
        GoukeiKeisan gk = new GoukeiKeisan();

        gk.sum(5, 10);
        int kotae = gk.getAns();
        System.out.println("5〜10までの和は" + kotae + "です");
    }
}

class GoukeiKeisan{
    private int ans;

    public void sum(int a, int b){
        ans = 0;
        for(int i=a; i<=b; i++){
            ans += i;
        }
    }
    
    public int getAns(){
        return ans;
    }
}

 ansは外部から変更されると困るのでprivateになってるですね!そしてメソッドに
対しては、publicをつけてるですね!さすがにこの2つのメソッドに対してもprivate
にしてしまうとクラスが役に立たなくなってしまうのでそれはやめた方がいいです。
 sum()メソッドとgetAns()メソッドは外部からアクセスしてもらうためにあるので
publicになってるです。でも常にすべてのメソッドがpublicになるとはかぎらないこと
もあるです。
 getAns()メソッドのようにフィールドの値を取得したり、ここには出てきてないです
がフィールドの値に代入したりするメソッドをアクセサメソッドと呼ぶです〜

 実はアクセス修飾子はクラスに対しても指定を行うことができるですが、それについ
てはパッケージの説明のときに一緒にやりたいと思ってるです。


今回のポイント
@ アクセス修飾子の表を見て欲しいです〜
A アクセス修飾子は、フィールド、メソッド、クラスなどにつけられる。
B 使い方は、フィールドなどの値を書くときに、最初に書く
  public int a; //こんな感じですね!

TOPに戻る   Java講座に戻る