カプセル化
カプセルの目的
フィールドを公開しない事により、変更してはならないフィールド値を謝って変更出来ない様にする。
アクセス制御について
アクセス制御のレベル
名前 | プログラム中の記載方法 | アクセスを許可する範囲 |
---|---|---|
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つのソースファイルに複数のクラスを宣言して良い
Author And Source
この問題について(カプセル化), 我々は、より多くの情報をここで見つけました https://qiita.com/k_sk193/items/d468533eef132d12d07b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .