
まず、最初にクラスのフィールド、メソッドを取り上げていきます。

前の章で取り上げたコードです。フィールドに属性や体力量を代入しています。
実際にキャラクターの属性や体力量を設定する
かのような処理が行われているわけです。
ところが、これだけでは問題が起きてしまう場合があります。
- char1.zokusei = ‘火’;
- char1.tairyoku = -25;
このコードは何を意味しているのでしょうか?
キャラクターがさしている体力量を-25とする。
ということが行われているのです。
けれども、これはおかしな話です。本当のキャラクターでは「体力量をマイナスにする」ことはありません。
通常クラスを設計するときに、このような不具合が起こらないように、様々な仕組みを使っていきます。これから、その仕組みをひとつずつ見ていくことにしましょう。
privateメンバをつくる
体力がマイナスになってしまう誤りの原因はなぜなのでしょうか?
メンバを無制限に利用し、勝手な値(ここでは-25)を代入してしまったこと
にあるといえます。Javaではこのようなまちがいが起こらないように、
クラスの外から勝手にアクセスできないようなメンバにしておく
ことができます。このメンバのことを、privateメンバといいます。ではさっそく、キャラクターの属性や体力量をprivateメンバにしてみましょう。
publicメンバをつくる
フィールドをprivateメンバにすると、クラスの外からアクセスできなくなります。しかし、本当にmain()メソッド内でキャラクターの属性や体力量を設定できなくなるのでしょうか?
実は、アクセスする方法があります。下記のコードを入力してみてください。


キャラクタークラスの外から、属性や体力量を直接設定することは不可能です。しかし、setZokuTai()メソッドならば呼び出し可能です。
setZokuTai()メソッドには、publicという指定をつけています。publicをつけたメンバはクラスの外から利用可能です。
こうして、privateとpublicを使い分けることで、正しい属性や体力量を設定することができるのです。
カプセル化のしくみを知る
キャラクタークラス自身に体力量が正しいかどうかをチェックする機能を持たせました。うっかり間違った値が設定されないクラスを設計できます。
クラスの仕様部分(クラス宣言)とクラスを利用する部分(main()メソッドなど)を、異なる人が記述する場合があります。
クラスを設計する人がメンバを適切にprivateメンバとpublicメンバに分類しておけば、他の人がそのクラスを利用した場合に誤りの起きにくいプログラムを作成できるので、大変便利です。
このように、クラスの中にデータ(フィールド)と機能(メソッド)をひとまとめにし、保護したいメンバにprivateをつけて勝手にアクセスできなくする機能をカプセル化といいます。
- フィールド privateメンバ
- メンバ publicメンバ
と指定することがよく行われています。カプセル化は、クラスが持つ重要な機能のひとつです。
privateとpublicを省略すると?
privateとpublicは、修飾子と呼ばれています。修飾子は、省略することもできます。これまでのコードには、何の修飾子も付けていませんでした。
修飾子を省略したメンバは、「同じパッケージ」というものに含まれるクラス内からアクセスすることができます。
今までは、特に何も指定せずに、同じファイルに記述したクラスは、すべて「同じパッケージ」に含まれるクラスになります。なので、今まで無事にアクセスできたのです。