
Java超|オブジェクト指向とクラスの基本
クラスが分かると、Javaのコードは「処理の並び」から「キャラクターを生み出す設計図」に変わる。
Javaを学び始めると、最初は変数、配列、条件分岐、繰り返しなどを使って、上から順番に処理を書くことが多いです。
小さなプログラムであれば、それでも十分に動かせます。
しかし、プログラムで扱う内容が増えてくると、ただ処理を並べるだけでは分かりにくくなります。
たとえば、ドラゴンボール風の世界で考えてみましょう。
悟空、ベジータ、悟飯、ピッコロ、クリリン、天津飯、ヤムチャ、トランクスのような戦士を管理するプログラムを作るとします。
戦士には、名前があります。所属する流派があります。戦闘力があります。体力もあります。さらに、攻撃する、移動する、気を高める、状態を表示するといった動きもあります。
ここで使う流派は、次のように整理します。
| 記号 | 流派名 |
|---|---|
| 亀 | 亀仙流 |
| 鶴 | 鶴仙流 |
| 武 | 武泰斗流 |
| 塔 | カリン流 |
| 魔 | ピッコロ魔族流 |
| 神 | 神流、ナメック流 |
| 惑 | 惑星戦士流 |
| 界 | 北の界王流 |
これらをバラバラの変数や処理として書いていくと、戦士が増えたときにコードがどんどん複雑になります。
そこで登場するのが クラス です。
クラスは、関連する情報と動きをひとまとまりにするためのしくみです。
Javaでは、このクラスがとても重要です。Javaのプログラムは基本的にクラスを土台にして作られるため、クラスの考え方を理解すると、コードが一気に見やすくなります。
ドラゴンボール風にたとえるなら、クラスは 悟空やベジータのような戦士を作るための設計図 です。
戦士にはどんな情報が必要なのか。
戦士はどんな動きができるのか。
それらをまとめて定義するものがクラスです。
ここでは、Javaのオブジェクト指向の入口として、クラス、フィールド、メソッド、メンバ、クラス宣言の基本を、戦士の設計図としてイメージしながら整理していきます。
クラスは情報と動きをまとめるための設計図
Javaのクラスをひとことで表すと、あるものについての情報と動きをまとめた設計図 です。
ドラゴンボール風に考えると、いきなり悟空だけを考えるのではありません。
まずは「戦士という存在には、どんな情報があり、どんな動きがあるのか」を整理します。
戦士には、たとえば次のような情報があります。
| 項目 | 例 |
|---|---|
| 名前 | 悟空、ベジータ、悟飯、ピッコロ、クリリン |
| 流派 | 亀仙流、鶴仙流、ピッコロ魔族流、北の界王流 |
| 流派記号 | 亀、鶴、魔、界 |
| 戦闘力 | どれくらい強いか |
| 体力 | 戦える残りの力 |
| 装備 | 道着、戦闘服、マント、補助スカウター |
また、情報だけでなく、次のような動きもあります。
| 動き | 例 |
|---|---|
| 自己紹介する | 自分の名前や流派を名乗る |
| 攻撃する | 流派に応じた技で攻撃する |
| 移動する | 戦場を高速移動する |
| 気を高める | 戦闘力を上げる |
| 状態を表示する | 名前、流派、戦闘力、体力を表示する |
このように、そのものが持っている情報と、そのものができる動きをひとつにまとめるのがクラスです。
クラスを使うと、ばらばらの変数や処理をそのまま並べるのではなく、次のように整理できます。
| 考え方 | 内容 |
|---|---|
| これは戦士に関する情報 | 名前、流派、戦闘力、体力など |
| これは戦士に関する動き | 攻撃する、移動する、気を高める、状態を表示するなど |
| だから戦士クラスにまとめる | 情報と動きを1つの設計図にする |
つまりクラスは、プログラムの中で扱うものを分かりやすく分類するための考え方でもあります。
Javaではクラスが土台になる
Javaでは、プログラムを書くときにクラスが欠かせません。
たとえば、Javaの基本的なコードは次のような形になります。
public class Main {
public static void main(String[] args) {
System.out.println("Javaを学習中です");
}
}この中の次の部分がクラスです。
public class MainJavaを学び始めたばかりのころは、Mainクラスを「とりあえず必要な外枠」と感じるかもしれません。
しかし、クラスをきちんと理解すると、この外枠にはもっと大切な意味があることが分かります。
クラスは、単なるコードの入れ物ではありません。
意味のある情報と処理をまとめる部品です。
ドラゴンボール風に言えば、クラスは 悟空、ベジータ、悟飯たちを登録して動かすための型 です。
たとえば、これまでは処理の流れを順番に書くことが中心だったかもしれません。
しかしクラスを意識すると、次のような見方ができるようになります。
| 見方 | 内容 |
|---|---|
| どんな情報を持たせるか | 名前、流派、流派記号、戦闘力、体力など |
| どんな機能を持たせるか | 攻撃する、移動する、気を高める、状態を表示するなど |
| どのまとまりで管理するか | 戦士クラス、敵クラス、修行場クラスなど |
この視点が、Javaのオブジェクト指向の入口です。
クラスとは何かをドラゴンボール風で考える
ドラゴンボール風の世界には、さまざまな戦士がいます。
悟空のように亀仙流で鍛えた戦士。
クリリンのように亀仙流の基礎を身につけた戦士。
天津飯のように鶴仙流の技を使う戦士。
ピッコロのようにピッコロ魔族流やナメック系の力を持つ戦士。
ベジータのように惑星戦士流の戦い方を持つ戦士。
悟空が北の界王のもとで修行したように、北の界王流の技を扱う戦士。
それぞれ個性は違いますが、共通して持っていそうな要素があります。
| 共通する要素 | 内容 |
|---|---|
| 名前がある | どの戦士なのかを表す |
| 流派がある | どの戦い方を身につけているかを表す |
| 流派記号がある | 亀、鶴、武、塔、魔、神、惑、界などで流派を表す |
| 戦闘力がある | 強さを数値で表す |
| 体力がある | どれくらい戦えるかを表す |
| 攻撃できる | 戦士として戦う動き |
| 状態を表示できる | 自分の情報を確認する動き |
こうした共通する情報と機能を整理して作る設計図がクラスです。
戦士クラスのイメージは、次のようになります。
class Warrior {
name
styleMark
styleName
power
setName()
attack()
showStatus()
}これは、実際に動かすための厳密なJavaコードというより、クラスの考え方をつかむためのイメージです。
この中には、戦士に関する情報と動きがまとまっています。
name、styleMark、styleName、powerは、戦士が持っている情報です。
setName、attack、showStatusは、戦士ができる動きです。
このように、状態や性質と、それに関係する機能をひとつにまとめるのがクラスの役目です。
図:クラスは戦士の設計図

この図が示していること
この図は、クラスが情報と動きをまとめる設計図であることを示しています。
左側の情報は、戦士が持っている状態です。
名前、流派記号、流派名、戦闘力、体力のように、その戦士がどんな存在なのかを表します。
右側の動きは、戦士ができる行動です。
攻撃する、移動する、気を高める、状態を表示するというように、実際の処理を表します。
中央の設計図から小さな戦士アイコンが生まれていることで、クラスは具体的な戦士を作るための土台だと分かります。
フィールドはそのものが持っている情報
クラスの中に書かれる情報の部分を、Javaでは フィールド と呼びます。
フィールドは、そのものが持っている状態や性質を表します。
ドラゴンボール風に言えば、フィールドは 悟空やベジータたちのプロフィール欄 です。
たとえば、Warriorクラスなら、次のようなフィールドが考えられます。
| フィールド | 表している内容 |
|---|---|
| name | 戦士の名前 |
| styleMark | 流派を表す記号 |
| styleName | 流派の正式名称 |
| power | 戦闘力 |
| stamina | 現在の体力 |
| equipment | 装備 |
戦士のフィールドのイメージは、次のようになります。
class Warrior {
name
styleMark
styleName
power
stamina
equipment
}この6つはすべて、戦士の情報です。
ここにはまだ、攻撃する、移動する、気を高める、状態を表示するといった動きは書かれていません。
あくまで、戦士が持っている情報を保存する場所です。
フィールドを理解するときは、その戦士の今の状態を覚えておくための欄 と考えると分かりやすいです。
たとえば、悟空なら次のような情報を持っているイメージです。
| 項目 | 内容 |
|---|---|
| 名前 | 悟空 |
| 流派記号 | 亀 |
| 流派名 | 亀仙流 |
| 戦闘力 | 9000 |
| 体力 | 100 |
| 装備 | 道着 |
ベジータなら、次のように別の情報を持たせられます。
| 項目 | 内容 |
|---|---|
| 名前 | ベジータ |
| 流派記号 | 惑 |
| 流派名 | 惑星戦士流 |
| 戦闘力 | 9500 |
| 体力 | 100 |
| 装備 | 戦闘服 |
この情報をクラスの中で持たせるための場所がフィールドです。
Java風に近づけると、次のように書けます。
class Warrior {
String name;
String styleMark;
String styleName;
int power;
int stamina;
String equipment;
}この中の次の部分がフィールドです。
String name;
String styleMark;
String styleName;
int power;
int stamina;
String equipment;フィールドがあることで、1人の戦士に関する情報をひとまとまりとして扱えるようになります。
流派をフィールドとして持たせる意味
今回の戦士クラスでは、流派をとても大切な情報として扱います。
なぜなら、流派によって、その戦士の雰囲気や攻撃方法が変わるからです。
| 流派記号 | 流派名 | 例にするキャラクター | 戦士のイメージ |
|---|---|---|---|
| 亀 | 亀仙流 | 悟空、クリリン、ヤムチャ | 基礎を大切にし、体術と気の扱いのバランスがよい |
| 鶴 | 鶴仙流 | 天津飯、餃子 | 鋭く素早い技を得意とする |
| 武 | 武泰斗流 | 亀仙人、鶴仙人 | 古き武術の型を重んじる |
| 塔 | カリン流 | 悟空、ヤジロベー | 修行による成長や身軽さを重視する |
| 魔 | ピッコロ魔族流 | ピッコロ | 特殊な技や威圧感のある戦い方をする |
| 神 | 神流、ナメック流 | 神様、デンデ、ピッコロ | 神秘的で精神性の高い技を扱う |
| 惑 | 惑星戦士流 | ベジータ、ナッパ、ラディッツ | 異星由来の荒々しい戦闘スタイルを持つ |
| 界 | 北の界王流 | 悟空 | 気の制御や高次の修行を重視する |
このように、流派は単なる文字ではありません。
戦士の個性を表す重要な情報です。
そのため、クラスの中ではstyleMarkやstyleNameのようなフィールドとして持たせると、戦士の特徴を整理しやすくなります。
メソッドはそのものができる動き
クラスの中に書かれる機能の部分を、Javaでは メソッド と呼びます。
フィールドが情報なら、メソッドは動きです。
ドラゴンボール風に言えば、メソッドは 悟空やベジータたちが実際に行う行動 です。
たとえば、Warriorクラスには次のようなメソッドが考えられます。
| メソッド | 役割 |
|---|---|
| setName | 名前を設定する |
| setStyle | 流派を設定する |
| attack | 流派に応じて攻撃する |
| move | 戦場を移動する |
| chargeKi | 気を高める |
| showStatus | 現在の情報を表示する |
戦士のメソッドのイメージは、次のようになります。
class Warrior {
name
styleMark
styleName
power
stamina
setName() {
名前を設定する
}
setStyle() {
流派を設定する
}
attack() {
流派に応じて攻撃する
}
move() {
戦場を移動する
}
showStatus() {
名前、流派、戦闘力、体力を表示する
}
}ここで大切なのは、メソッドはクラスの外にあるばらばらの処理ではなく、そのクラスの情報に関係する動きとして書かれることです。
たとえば、状態を表示するという動きは、name、styleMark、styleName、power、staminaと深く関係しています。
だから、Warriorクラスの中に置くのが自然です。
Java風に書くと、次のようになります。
class Warrior {
String name;
String styleMark;
String styleName;
int power;
int stamina;
void setName(String newName) {
name = newName;
}
void setStyle(String newStyleMark, String newStyleName) {
styleMark = newStyleMark;
styleName = newStyleName;
}
void attack() {
System.out.println(name + "は" + styleName + "の技で攻撃する");
}
void move() {
System.out.println(name + "は戦場を高速移動する");
}
void chargeKi() {
System.out.println(name + "は気を高めた");
}
void showStatus() {
System.out.println("名前: " + name);
System.out.println("流派記号: " + styleMark);
System.out.println("流派名: " + styleName);
System.out.println("戦闘力: " + power);
System.out.println("体力: " + stamina);
}
}この中の次の部分がメソッドです。
void setName(String newName)
void setStyle(String newStyleMark, String newStyleName)
void attack()
void move()
void chargeKi()
void showStatus()メソッドは、フィールドの情報を使って処理を行うことが多いです。
たとえば、attackメソッドでは、nameとstyleNameを使っています。
void attack() {
System.out.println(name + "は" + styleName + "の技で攻撃する");
}これは、戦士の名前と流派名を使って、攻撃の内容を表示しています。
たとえば、nameに悟空、styleNameに亀仙流が入っていれば、悟空は亀仙流の技で攻撃する、という意味のある動きになります。
つまりメソッドは、クラスが持っている情報を使って、意味のある動きを実行する部分です。
図:フィールドとメソッドはクラスのメンバ

この図が示していること
この図は、クラスの中にあるフィールドとメソッドをまとめてメンバと呼ぶことを示しています。
左側のフィールドは、戦士の情報です。
名前、流派記号、流派名、戦闘力、体力のように、その戦士が持っている状態を表します。
右側のメソッドは、戦士の動きです。
流派を設定する、攻撃する、移動する、気を高める、状態を表示するというように、その戦士ができる処理を表します。
下部の「メンバ = フィールド + メソッド」によって、メンバという言葉がクラス内の部品全体を指すことが分かります。
フィールドとメソッドを合わせてメンバという
クラスの中にあるフィールドとメソッドは、まとめて メンバ と呼ばれます。
メンバという言葉だけ見ると少しかたく感じるかもしれませんが、意味はとてもシンプルです。
クラスを構成している部品のこと です。
| 用語 | 役割 |
|---|---|
| フィールド | 情報を持つ部品 |
| メソッド | 動きを持つ部品 |
| メンバ | フィールドとメソッドをまとめた呼び方 |
Warriorクラスなら、次のように整理できます。
| 種類 | 例 |
|---|---|
| フィールド | name、styleMark、styleName、power、stamina |
| メソッド | setStyle、attack、move、chargeKi、showStatus |
| メンバ | フィールドとメソッドすべて |
たとえば、次のクラスを見てみます。
class Warrior {
String name;
String styleMark;
String styleName;
void attack() {
System.out.println(name + "は" + styleName + "の技で攻撃する");
}
void showStatus() {
System.out.println("名前: " + name);
System.out.println("流派記号: " + styleMark);
System.out.println("流派名: " + styleName);
}
}このクラスのメンバは、次のようになります。
| メンバ | 種類 |
|---|---|
| name | フィールド |
| styleMark | フィールド |
| styleName | フィールド |
| attack | メソッド |
| showStatus | メソッド |
このように、クラスの中にある情報と動きをまとめてメンバと呼びます。
Javaの説明で「このクラスのメンバ」という言葉が出てきたら、クラスの中にあるフィールドやメソッドのこと と考えると分かりやすいです。
クラスを宣言するとは何をしているのか
クラスを書くことを、Javaでは クラスを宣言する といいます。
宣言という言葉は少しかたいですが、やっていることはシンプルです。
こういう情報を持つまとまりを作ります。
こういう機能を持つまとまりを作ります。
この名前のクラスとして定義します。
これがクラス宣言です。
ドラゴンボール風に言えば、次のような設計図を作っている状態です。
戦士クラスを作ります。
このクラスには名前、流派記号、流派名、戦闘力を持たせます。
さらに攻撃や状態表示の機能も持たせます。戦士のクラス宣言のイメージは、次のようになります。
class Warrior {
name
styleMark
styleName
power
attack() {
流派に応じて攻撃する
}
showStatus() {
名前、流派、戦闘力を表示する
}
}この段階では、まだ具体的な一人の戦士を作っているわけではありません。
悟空という戦士を作っているのではなく、Warriorという設計図 を用意している状態です。
ここで大切なのは、クラスはある一人だけの情報ではなく、共通の型を表すということです。
悟空専用のその場限りのデータではなく、戦士というまとまりを整理した土台を作っています。
Java風に書くと、次のようになります。
class Warrior {
String name;
String styleMark;
String styleName;
int power;
void attack() {
System.out.println(name + "は" + styleName + "の技で攻撃する");
}
void showStatus() {
System.out.println("名前: " + name);
System.out.println("流派記号: " + styleMark);
System.out.println("流派名: " + styleName);
System.out.println("戦闘力: " + power);
}
}このWarriorクラスは、戦士の共通の型です。
同じ設計図を使って、あとから悟空、ベジータ、悟飯、ピッコロ、クリリン、天津飯などを作れるようになります。
クラスは共通の型を表す
クラスを学ぶときに、とても大切な考え方があります。
それは、クラスは 具体的な一人 ではなく、共通の型 を表すということです。
たとえば、Warriorクラスは、悟空だけを表すものではありません。
悟空だけの情報。
ベジータだけの情報。
悟飯だけの情報。
ピッコロだけの情報。
これらを直接書いているわけではなく、戦士に共通する情報と動きをまとめています。
class Warrior {
String name;
String styleMark;
String styleName;
int power;
}このクラスは、いろいろな戦士に使えます。
| 戦士 | name | styleMark | styleName | power |
|---|---|---|---|---|
| 悟空 | 悟空 | 亀 | 亀仙流 | 9000 |
| クリリン | クリリン | 亀 | 亀仙流 | 4500 |
| 天津飯 | 天津飯 | 鶴 | 鶴仙流 | 7000 |
| ピッコロ | ピッコロ | 魔 | ピッコロ魔族流 | 8800 |
| デンデ | デンデ | 神 | 神流、ナメック流 | 3000 |
| ベジータ | ベジータ | 惑 | 惑星戦士流 | 9500 |
| ナッパ | ナッパ | 惑 | 惑星戦士流 | 7800 |
| 悟空 | 悟空 | 界 | 北の界王流 | 9900 |
同じWarriorクラスでも、フィールドに入る値が変われば、別々の戦士を表せます。
ここで注目したいのは、悟空のように複数の流派や修行経験を持つキャラクターも、フィールドの値を変えれば表現できるという点です。
たとえば、亀仙流の悟空として見るなら、styleMarkは亀、styleNameは亀仙流になります。
北の界王のもとで修行した悟空として見るなら、styleMarkは界、styleNameは北の界王流になります。
つまりクラスは、具体的な値を入れる前の設計図です。
ドラゴンボール風に言えば、Warriorクラスは 戦士登録用の共通カード のようなものです。
| 登録欄 | 内容 |
|---|---|
| 名前欄 | 悟空、ベジータ、悟飯などを入れる |
| 流派記号欄 | 亀、鶴、武、塔、魔、神、惑、界などを入れる |
| 流派名欄 | 亀仙流、鶴仙流、北の界王流などを入れる |
| 戦闘力欄 | 強さの数値を入れる |
この共通カードに具体的な値を入れることで、1人ひとりの戦士を表せます。
なぜクラスが必要なのか
クラスが必要な理由は、プログラムを整理しやすくするためです。
もしクラスを使わずに、名前、流派記号、流派名、戦闘力、体力、攻撃処理、表示処理をすべて別々に書いていたら、戦士が増えるたびに管理が大変になります。
たとえば、クラスを使わずに書くと、次のようになります。
String name1 = "悟空";
String styleMark1 = "亀";
String styleName1 = "亀仙流";
int power1 = 9000;
String name2 = "ベジータ";
String styleMark2 = "惑";
String styleName2 = "惑星戦士流";
int power2 = 9500;
String name3 = "ピッコロ";
String styleMark3 = "魔";
String styleName3 = "ピッコロ魔族流";
int power3 = 8800;人数が少ないうちは、まだ読めます。
しかし、悟空、ベジータ、悟飯、ピッコロ、クリリン、天津飯、ヤムチャ、トランクス、フリーザ、セルのように、管理する対象が増えていくと、どの名前が誰のものなのか、どの流派が誰のものなのかが分かりにくくなります。
さらに、攻撃処理や状態表示の処理も追加されると、コードはもっと複雑になります。
クラスを使えば、戦士に必要な情報と動きをひとまとまりにできます。
class Warrior {
String name;
String styleMark;
String styleName;
int power;
void attack() {
System.out.println(name + "は" + styleName + "の技で攻撃する");
}
void showStatus() {
System.out.println("名前: " + name);
System.out.println("流派記号: " + styleMark);
System.out.println("流派名: " + styleName);
System.out.println("戦闘力: " + power);
}
}このようにしておけば、戦士に関係する情報と動きがWarriorクラスにまとまります。
クラスを使うメリットは次のとおりです。
| メリット | 説明 |
|---|---|
| 情報をまとめられる | 名前、流派記号、流派名、戦闘力などを1つのまとまりにできる |
| 動きをまとめられる | 攻撃、移動、気を高める、状態表示などを一緒に管理できる |
| コードが読みやすくなる | 何についての処理なのか分かりやすい |
| 修正しやすくなる | 変更する場所を見つけやすい |
| 同じ型を使い回せる | 複数の戦士を同じ設計図から作れる |
クラスは、プログラムが大きくなったときほど力を発揮します。
戦士が増えても、Warriorという共通の設計図があれば、情報と動きを整理しながら扱えます。
クラスを見るときのコツ
クラスの学び始めで迷いやすいのは、クラスの中にいろいろ書かれていて、何が何だか分からなくなることです。
そんなときは、次の順番で見ると理解しやすいです。
| 見る順番 | 確認すること | ドラゴンボール風の見方 |
|---|---|---|
| 1 | 何についてのクラスか | 悟空やベジータのような戦士についての設計図か |
| 2 | どんな情報を持つか | 名前、流派記号、流派名、戦闘力、体力など |
| 3 | どんな動きをするか | 攻撃する、移動する、気を高める、状態を表示するなど |
たとえば、次のクラスを見てみます。
class Warrior {
String name;
String styleMark;
String styleName;
void attack() {
System.out.println(name + "は" + styleName + "の技で攻撃する");
}
void showStatus() {
System.out.println("名前: " + name);
System.out.println("流派記号: " + styleMark);
System.out.println("流派名: " + styleName);
}
}まず見るのは、クラス名です。
class Warriorこれで、戦士についてのクラスだと分かります。
次にフィールドを見ます。
String name;
String styleMark;
String styleName;これで、このクラスは名前、流派記号、流派名を情報として持つことが分かります。
最後にメソッドを見ます。
void attack()
void showStatus()これで、このクラスは攻撃する、状態を表示するという動きを持つことが分かります。
この順番で見ると、クラスの中身がかなり整理しやすくなります。
図:クラス宣言は共通の型を作ること

この図が示していること
この図は、クラス宣言が「具体的な一人を作ること」ではなく、「共通の設計図を作ること」だと示しています。
左側の巻物には、Warriorクラスの共通項目があります。
name、styleMark、styleName、powerは情報で、attack、showStatusは動きです。
右側の複数の戦士カードは、同じクラスに違う値を入れることで、別々の戦士を表せることを示しています。
つまり、クラスは1回作って終わりではありません。
同じ設計図を使い回して、悟空、ベジータ、ピッコロ、天津飯など、さまざまな実体を作るための共通の型になります。
クラスの基本構造をイメージコードで整理する
ここまでの内容を、ひとつのイメージコードとして整理してみます。
class Warrior {
name
styleMark
styleName
power
stamina
equipment
setName() {
名前を設定する
}
setStyle() {
流派記号と流派名を設定する
}
setPower() {
戦闘力を設定する
}
attack() {
流派に応じた技で攻撃する
}
move() {
戦場を移動する
}
chargeKi() {
気を高める
}
showStatus() {
名前を表示する
流派記号を表示する
流派名を表示する
戦闘力を表示する
体力を表示する
装備を表示する
}
}この形を見ると、クラスの基本がよく分かります。
上のほうには情報がまとまっています。
| 情報 | 内容 |
|---|---|
| name | 名前 |
| styleMark | 流派記号 |
| styleName | 流派名 |
| power | 戦闘力 |
| stamina | 体力 |
| equipment | 装備 |
下のほうには動きがまとまっています。
| 動き | 内容 |
|---|---|
| setName | 名前を設定する |
| setStyle | 流派を設定する |
| setPower | 戦闘力を設定する |
| attack | 攻撃する |
| move | 移動する |
| chargeKi | 気を高める |
| showStatus | 状態を表示する |
そして、どちらも戦士に関係する内容だけでそろっています。
ここが大切です。
クラスの中に何でも入れてよいわけではありません。
Warriorクラスなら、戦士に関係する情報と動きを入れます。
そうすることで、コードが読みやすくなり、あとから手を加えるときも整理しやすくなります。
Javaの基本構造
イメージコードをJava風に書くと、次のようになります。
class Warrior {
String name;
String styleMark;
String styleName;
int power;
int stamina;
String equipment;
void setName(String newName) {
name = newName;
}
void setStyle(String newStyleMark, String newStyleName) {
styleMark = newStyleMark;
styleName = newStyleName;
}
void setPower(int newPower) {
power = newPower;
}
void attack() {
System.out.println(name + "は" + styleName + "の技で攻撃する");
}
void move() {
System.out.println(name + "は戦場を高速移動する");
}
void chargeKi() {
System.out.println(name + "は気を高めた");
}
void showStatus() {
System.out.println("名前: " + name);
System.out.println("流派記号: " + styleMark);
System.out.println("流派名: " + styleName);
System.out.println("戦闘力: " + power);
System.out.println("体力: " + stamina);
System.out.println("装備: " + equipment);
}
}このコードでは、Warriorクラスの中に、フィールドとメソッドがまとまっています。
| 区分 | 内容 |
|---|---|
| フィールド | name、styleMark、styleName、power、stamina、equipment |
| メソッド | setName、setStyle、setPower、attack、move、chargeKi、showStatus |
フィールドは、戦士の情報です。
メソッドは、戦士の動きです。
この2つをひとつのクラスにまとめることで、戦士に関するコードとして整理できます。
原作キャラクター名を使った流派設定の見方
今回のWarriorクラスでは、流派をstyleMarkとstyleNameの2つで表しています。
| フィールド | 例 | 役割 |
|---|---|---|
| styleMark | 亀 | 短く流派を表す記号 |
| styleName | 亀仙流 | 流派の正式名称 |
たとえば、悟空を亀仙流の戦士として見るなら、次のようなイメージです。
name = "悟空";
styleMark = "亀";
styleName = "亀仙流";ベジータを惑星戦士流の戦士として見るなら、次のようになります。
name = "ベジータ";
styleMark = "惑";
styleName = "惑星戦士流";ピッコロをピッコロ魔族流の戦士として見るなら、次のようになります。
name = "ピッコロ";
styleMark = "魔";
styleName = "ピッコロ魔族流";天津飯を鶴仙流の戦士として見るなら、次のようになります。
name = "天津飯";
styleMark = "鶴";
styleName = "鶴仙流";このように、同じWarriorクラスでも、名前や流派の値を変えることで、違う戦士を表せます。
つまり、クラスは共通の設計図であり、フィールドに入る値によって、具体的な戦士の個性が決まるということです。
クラスを学ぶ最初の段階で大切なこと
クラスを学ぶ最初の段階では、いきなり難しい用語をすべて完璧に覚えようとしなくても大丈夫です。
まずは、次の考え方をしっかりつかむことが大切です。
| 用語 | 最初に押さえるイメージ |
|---|---|
| クラス | 情報と動きをひとまとめにする設計図 |
| フィールド | クラスが持つ情報 |
| メソッド | クラスが持つ動き |
| メンバ | フィールドとメソッドをまとめた呼び方 |
| クラス宣言 | その設計図を作ること |
ドラゴンボール風に考えるなら、クラスとは 悟空やベジータのような戦士を作る設計図 を作ることです。
その設計図の中に、名前、流派記号、流派名、戦闘力、体力のような情報があります。
攻撃する、移動する、気を高める、状態を表示するという動きもあります。
それらをひとつの部品として整理していくのが、Javaのクラスの基本です。
そして今回のように原作キャラクター名と流派を組み合わせると、戦士クラスのイメージはさらに分かりやすくなります。
悟空は、亀仙流や北の界王流の値を持つ戦士として表せます。
ベジータは、惑星戦士流の値を持つ戦士として表せます。
ピッコロは、ピッコロ魔族流や神流、ナメック流の値を持つ戦士として表せます。
天津飯は、鶴仙流の値を持つ戦士として表せます。
クリリンは、亀仙流の値を持つ戦士として表せます。
これらはすべて、Warriorという共通の設計図から表現できます。
違うのは、フィールドに入る名前や流派、戦闘力の値です。
この感覚を持てるようになると、Javaのクラスは「難しい文法」ではなく、「情報と動きを整理して、意味のある部品を作るしくみ」として理解しやすくなります。
