Java入門|9章のまとめ

戦士を守り、育て、進化させる設計へ クラスの力を極める章

この章では、これまで作ってきた「戦士(オブジェクト)」を、より安全に、より強く扱うための仕組みを学んできました。

ドラゴンボールの世界で考えると、ただ戦士を生み出すだけでは不十分です。
正しい修行をさせる、危険な行動を防ぐ、状況に応じて技を使い分ける、といったルールが必要になります。

Javaのクラスも同じで、単なるデータの入れ物ではなく、
安全に扱うためのルール(アクセス制御)や柔軟な動きを実現する仕組み(オーバーロード・コンストラクタなど)を持っています。

ここでは、9章で学んだ内容をドラゴンボールの世界観で整理していきます。

メンバを守る仕組み(アクセス制御)

戦士の内部状態である戦闘力や気は、外部から自由に変更できてしまうと問題が発生します。
たとえば、外から無理やり負の気を設定されると、明らかに不自然な状態になります。

これを防ぐために使うのが private と public です。

種類役割
privateクラス内部だけで扱う
public外部から利用できる

設計の基本は次の通りです。

  • フィールドは private にする
  • 操作は public メソッド経由にする

これにより、戦士の状態は安全に管理されます。

カプセル化の考え方

カプセル化とは、

内部のデータを隠し、安全な操作だけを外に公開する

という考え方です。

ドラゴンボールのイメージでは、

  • 戦闘力や気は直接触れない
  • 技(メソッド)を通してのみ操作する

という状態です。

この設計によって、

  • 不正な値の代入を防げる
  • プログラムの不具合を減らせる

という効果があります。

同じ名前で使い分ける仕組み(オーバーロード)

同じ名前のメソッドでも、引数が異なれば別の処理として定義できます。

これがオーバーロードです。

ドラゴンボールで考えると、同じ「技」でも使い方が変わるイメージです。

呼び出し処理内容
setSaiyan(9000)戦闘力だけ設定
setSaiyan(20.5)気だけ設定
setSaiyan(9000, 20.5)両方設定

引数の違いによって、自動的に適切な処理が選ばれます。

これは多態性(ポリモーフィズム)の基本となる重要な仕組みです。

コンストラクタの役割

コンストラクタは、オブジェクトが作られる瞬間に実行される処理です。

戦士が誕生した瞬間に、初期状態が決まるイメージです。

  • 初期戦闘力
  • 初期の気

これらを自動的に設定するために使われます。

コンストラクタのオーバーロード

コンストラクタも複数定義できます。

引数が異なることで、異なる初期状態を作ることができます。

作成方法初期状態
new Saiyan()デフォルトの戦士
new Saiyan(9000, 20.5)指定された能力を持つ戦士

これにより、用途に応じたオブジェクト生成が可能になります。

インスタンスとクラスの違い

ここでは「個」と「全体」の違いが重要です。

インスタンス(個別の戦士)

  • 悟空の戦闘力
  • ベジータの気

各オブジェクトごとに異なる値を持ちます。

クラス(全体)

  • サイヤ人の総人数

すべてのオブジェクトで共有される情報です。

整理表

種類内容
インスタンス変数個別のデータpower
インスタンスメソッド個別の処理show()
クラス変数全体で共有count
クラスメソッド全体の処理showCount()

この図では、9章の要素がすべてつながっています。

  • 鍵アイコン → private(外から直接触れない)
  • 扉アイコン → public(安全に操作する入口)
  • count → 全体で共有される情報
  • goku と vegeta → 個別のオブジェクト

つまり、

  • 内部は守る
  • 外部には安全な操作だけ公開する
  • 個別と全体を使い分ける

という構造になっています。

この9章で身につけた本質

この章で学んだ内容を一言で表すと次の通りです。

クラスは、安全で柔軟なプログラムを作るための設計図である

  • private によって内部を守る
  • public によって安全に操作する
  • オーバーロードで柔軟に対応する
  • コンストラクタで初期状態を制御する
  • static で全体を管理する

これらを組み合わせることで、壊れにくく、使いやすいプログラムを設計できるようになります。