LoginSignup
0
2

More than 5 years have passed since last update.

カプセル化

Last updated at Posted at 2018-02-24

カプセルの目的

フィールドを公開しない事により、変更してはならないフィールド値を謝って変更出来ない様にする。

アクセス制御について

アクセス制御のレベル

名前               プログラム中の記載方法 アクセスを許可する範囲
private private   自分自身と同じクラスのみ
package private 何も書かない(デフォルト)  自分自身と同じパッケージのみ
protected protected   自分自身と同じパッケージに属するか、自分を継承した子クラス
public public  全てのクラス                        

フィールド及びメソッドに対するアクセス制御について

(考え方)
基本的にフィールドにはprivateを使用する事が多い。メソッドは作成する度に適用範囲を考える。

メソッドを経由したフィールドの設定

getter

(使い方)

public 値を返す型 getフィールド名(){
  return this.フィールド名;//
}

(コード)

private String name;

public String getName(){
   return this.name;//このクラスのnameの値を返す
}

(呼出方法)

System.out.println(getName());

setter

(使い方)

public void setフィールド名(引数のデータ型 引数を入れる変数名){
  this.フィールド名=引数を入れる変数名
}

(コード)

private String name;

public void setName(String name){
   this.name = name
}

(呼出方法)

インスタンス名.setName("ヨシヒコ");

getter/setterを使うメリット

Read Only Write Only のフィールドを実現出来る。
→setだけの場合write Only、getだけの場合Read Only

フィールド名を変更しやすい
→フィールドの名前を変えた際、他のクラスがフィールド名を直接使用している場合は、他のクラスまで修正が必要になるが、get/setを使用している場合は、自身のクラス内のget/set内のクラス名の修正だけで済む。

フィールドに対する、アクセスを検査出来る
→(例)mpというフィールドに、0以下の値が代入された場合、throw new IllegalArgumentExceptionで強制的にエラーを発生させ、システムを終了する。

    public void setMp(int mp) {
        if (mp < 0) {
            throw new IllegalArgumentException("mpは0以上を設定して下さい");
        }
        mp = this.mp;
    }

クラスに対するアクセス制御

アクセス制御のレベル

名前               プログラム中の記載方法 アクセスを許可する範囲
public public   全て
package private 何も書かない(デフォルト)  自分自身と同じパッケージのみ

非publicクラスの特徴

・クラス名はソースファイル名と異なっても良い
・1つのソースファイルに複数のクラスを宣言して良い

0
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2