こんにちは!ISAMU(@burlesca_isa)です!
今回の対象読者は
- カプセル化について学びたい方
- アクセス修飾子について学びたい方
アクセス修飾子とは
クラス、コンストラクタ、メンバ変数、メソッドへ他のクラスからアクセスを許可するかどうかを指定することが出来ます。
ローカル変数には使用出来ません。
アクセス修飾子一覧
private
privateは同一クラス内からのみ利用可能になります。
デフォルト(private package)
別名private packageと呼ばれ、同一パッケージのアクセスを許可します。
デフォルトの書き方は、アクセス修飾子を付けない形です。
protected
protectedは同一パッケージ内のクラスとクラスを継承したサブクラスで使用可能になります。
継承に関してはここでは説明しません。
まだ継承について勉強していない方は特に気にしなくて大丈夫です。
public
public はどのクラスからでもアクセスが可能になります。
別パッケージのクラスからアクセスする
別パッケージのクラスを使用するには、クラスにpublicアクセス修飾子をつけて、
メンバ変数やメンバメソッドにpublicをつけます。
protectedとprivateはクラスには適用できません。
カプセル化とは
カプセル化とはフィールドへの読み書きやメソッドの呼び出しを制限する機能です。
制限することにより、変数への意図しない代入やメソッドの呼び出しを防ぐことが出来ます。
意図しない呼び出しを防ぐには、先程学んだアクセス修飾子を使用します。
カプセル化しなくてもプログラムは記述出来ますが、
使用することによりミスを減らすことが可能です。
オブジェクト指向プログラミングの特徴の一つであり、
プログラマーとして仕事をしたいと考えている場合は覚えることは必須といえます。
カプセル化の記述方法
アクセス演算子を使用して、関係ないクラスからのアクセスをさせないようにします。
推奨されるカプセル化の記述方法を示します。
- メンバ変数・・・private
- メンバメソッド・・・public
基本的には上記のように記述するだけでカプセル化の実装となりますが、
メンバ変数はprivateなので、値を直接代入することが出来ません。
そのため、アクセッサと呼ばれるメソッドを記述します。
アクセッサには2種類あります。
- 値を代入するメソッドのことをセッター
- 値を取得するメソッドのことをゲッター
セッターの構文
public void set[メンバ変数名] (データ型 変数名){
this.メンバ変数名 = 変数名;
}
ゲッターの構文
public データ型 get[メンバ変数名](){
return this.メンバ変数名;
}
サンプルプログラム
ゲッターやセッターのメソッド名は任意で指定可能ですが、
わかりやすくするためのルールがあります。
セッターの場合は
set + 先頭大文字のメンバ変数名
ゲッターの場合は
get + 先頭大文字のメンバ変数名
サンプルプログラムではnumというメンバ変数を使用しているので、
- セッター setNum
- ゲッター getNum
となります。