カプセル化の基本
オブジェクト指向のプログラミングでは、効率良く、安全にコードを書く仕組みが大きく分けると3つある。
1つ目
フィールドへの読み書きやメソッドの呼び出しを制御する機能(アクセス制御)
ex. このメソッドはAクラスからは呼び出し可だが、Bクラスからは不可
このフィールドは読めるが、書き替えは禁止
〈このような制御をかけることでのメリット〉
制御があると、ミスが減る/防止出来る
ミスが出ても、どこで起こったかがすぐ分かる
(動かせる部分が決まってくるので(制御されていないところだけ)、
元をたどればどこでミスしたか分かる)
※ 人間は必ずミスをするので、未然にミスを防ぐ仕組みを作っておく必要がある
このアクセス制御には、制御のレベルが4段階がある
〈制限厳しい〉
private... 自分自身のクラスのみ許可
package private.... 自分と同じパッケージに属するクラスまで許可
(↑何も書かないと、自動でこれになる。あえて記述しなくてもOK)
protected.... 自分と同じパッケージに属するか、自分を継承した小クラスでも許可
public....全てのクラスから許可
〈制限が緩い〉
このprivate/protected/publicを、「アクセス修飾子」と呼ぶ。
フィールドやメソッドを宣言する際、先頭に記述する
〈構文〉
フィールド
アクセス修飾子 フィールド名;
アクセス修飾子 メソッド名{
アクセス修飾子はとりあえず下記のようにしておけばOK
クラスは必ず全て public
ex.勇者は戦うのが仕事なので、頻繁にいろいろなクラスから呼び出される可能性がある→どのクラスからも呼び出せるようにしておく
public void attack(Slimes){//スライムに攻撃するメソッド
メソッドは基本的には全て public
... 最初このように指定しておいて、その後クラスの内部だけしか利用しないメソッドをprivateに直していく(大枠で概要決めて、後から細かく微調整していくイメージ)
フィールドは全て private