Javaの大きな特徴のひとつが オブジェクト指向(Object Oriented Programming) です。
ここからの記事では、その根幹となる クラス と オブジェクト をわかりやすく解説します。
難しく思われがちですが、実は考え方はシンプル。
この記事を読めば、Javaが「現実世界をプログラムで表現する」ための仕組みが理解できます。
この記事で学べること
- クラスとは何か?
- オブジェクトとは何か?
- フィールドとメソッドの違い
- インスタンス化(new)とは?
- 自作クラスを作ってみよう
クラスとは?
クラスとは、設計図 のようなものです。
もしくは部品といったほうが分かりやすいでしょうか?
例えば「人」を表現したいなら:
- 名前
- 年齢
- 挨拶する動作
といった情報・行動をひとまとめにできます。
オブジェクトとは?
クラス(設計図)から実際に作られた 実体がオブジェクト(インスタンス) です。
- 設計図 → クラス
- 設計図から作られた“もの” → オブジェクト(インスタンス)
例)人クラス(Person)から作られるオブジェクト
- 太郎(名前:太郎、年齢:20)
- 花子(名前:花子、年齢:18)
クラスの基本構造
public class Person {
// フィールド(データ)
String name;
int age;
// メソッド(動作)
public void greet() {
System.out.println("こんにちは!私は" + name + "です。");
}
}
ちなみにクラスはファイルを作る際に既に書かれていると思います。
中身は何も書かれてないですがね。
用語まとめ
| 用語 | 意味 |
|---|---|
| フィールド | オブジェクトが持つ「値」 |
| メソッド | オブジェクトが持つ「動作」 |
オブジェクトを作って使う(インスタンス化)
クラスからオブジェクトを作るには new を使います。
Person p = new Person();
フィールドに値を入れる
p.name = "太郎";
p.age = 20;
「new」で作ったオブジェクトは「.」を使うことでフィールドにアクセスすることができます。
これを「System.out.println(person.name);」のようにすると、先ほど入れた「太郎」が出力されます。
メソッドを呼び出す
p.greet(); // こんにちは!私は太郎です。
フィールド同様「.」でアクセスでき、使うことができます。
実践例 Personクラスを使ってみよう
Person.java
public class Person {
String name;
int age;
public void greet() {
System.out.println("こんにちは!私は" + name + "です。年齢は" + age + "歳です。");
}
}
Main.java
public class Main {
public static void main(String[] args) {
Person taro = new Person();
taro.name = "太郎";
taro.age = 20;
Person hanako = new Person();
hanako.name = "花子";
hanako.age = 18;
taro.greet();
hanako.greet();
}
}
クラスを使うメリット
| メリット | 説明 |
|---|---|
| データと動作をまとめられる | name・age・greet() をセットとして扱える |
| 再利用できる | 一度作れば何個でもオブジェクト化できる |
| 現実の概念をそのまま表せる | 人・商品・顧客などを自然に扱える |
まとめ
| キーワード | 内容 |
|---|---|
| クラス | 設計図(データ+動作) |
| オブジェクト(インスタンス) | 設計図から作られた実体 |
| フィールド | 値を持つ変数 |
| メソッド | 行動を表す処理 |
| new | オブジェクトを作るキーワード |
補足
次から次へと新しいワードが出てきましたが、どうでしたか?
例えば勇者とモンスターが戦いを繰り広げるゲームがあるとします。
このゲームに必要なのは何だと思いますか?
答えは~
| 登場人物 | 体力 | 攻撃力 |
| 勇者 | 15 | 5 |
| モンスター | 10 | 3 |
こんな感じでしょうか。
そしてここから設計図を作るのです。
必要なのは勇者クラス(Hero.java)とモンスタークラス(Monster.java)になります。
例としてコードを置いておきますので、是非参考までに。
Hero.java
public class Hero {
String name;
int hp;
int attack;
}
Monster.java
public class Monster {
String name;
int hp;
int attack;
}
Main.java
public class Main {
public static void main(String[] args) {
// 勇者オブジェクト
Hero hero = new Hero();
hero.name = "勇者";
hero.hp = 15;
hero.attack = 5;
// モンスターオブジェクト
Monster monster = new Monster();
monster.name = "スライム";
monster.hp = 10;
monster.attack = 3;
System.out.println("勇者のステータス 体力:" + hero.hp + " 攻撃力:" + hero.attack);
System.out.println("モンスターのステータス 体力:" + monster.hp + "攻撃力:" + monster.attack);
System.out.println();
System.out.println("勇者の攻撃: モンスターに" + hero.attack + "のダメージ!");
monster.hp = monster.hp - hero.attack;
System.out.println("モンスターのHP: " + monster.hp);
}
}
今までに使った「if文」や「while文」などを使ってもいろいろできそうですよね。
例えばモンスターのHPが0になったら、「戦闘終了」みたいなメッセージを出すとか、、、
もしできるのであれば以前学んだものを使って色々試行錯誤することも非常に勉強になるのでやってみてください。
宿題です!しかし提出はなし!
ではでは!次回!:Java入門⑨ コンストラクタとカプセル化

コメント