では「クラス同士が協力する」例として、ロボットと電池クラスを組み合わせてみましょう。これで「オブジェクト同士の関係」が分かりやすくなります。
シナリオ
- ロボットは動くために電池が必要
- 電池が切れたらロボットは動けない
- 電池を交換すればまた動ける
コード例:Robot × Battery
// 電池クラス
class Battery {
int power; // 残り電力
Battery(int power) {
this.power = power;
}
// 電力を1消費する
boolean use() {
if (power > 0) {
power--;
return true; // 使えた
} else {
return false; // 電池切れ
}
}
void charge(int amount) {
power += amount;
System.out.println("電池を充電しました。残り電力: " + power);
}
}
// ロボットクラス
class Robot {
String name;
int position = 0;
Battery battery; // 電池を持つ
Robot(String name, Battery battery) {
this.name = name;
this.battery = battery;
}
void moveForward() {
if (battery.use()) {
position++;
System.out.println(name + " が1歩進みました。現在位置: " + position);
} else {
System.out.println(name + " は電池切れで動けません!");
}
}
void report() {
System.out.println(name + " の現在位置は " + position + " です。");
}
}
// 実行クラス
public class Main {
public static void main(String[] args) {
Battery bat1 = new Battery(2); // 電池残量2
Robot robo = new Robot("タロウ", bat1);
robo.moveForward(); // → 動ける
robo.moveForward(); // → 動ける
robo.moveForward(); // → 電池切れで動けない
bat1.charge(3); // 電池を充電
robo.moveForward(); // → 再び動ける
robo.report(); // → 現在位置を表示
}
}
Javaポイント解説
- Batteryクラス
- 電力を管理する役割
use()で電力を消費、charge()で充電
- Robotクラス
- Batteryを「部品」として持つ(フィールドにBattery型を持つ)
- 動くときに
battery.use()を呼び出して電池を消費
- Mainクラス
- 実際にロボットと電池を作って動かす
学びのまとめ
- クラスは「役割ごと」に分けると分かりやすい
- ロボットは「動くこと」に集中、電池は「電力管理」に集中
- こうしてクラスを分けると、再利用性や拡張性が高まる
- 例:電池を「ソーラーバッテリー」に変えるのも簡単

