INTRODUCTION
「クラス」と「オブジェクト」がよく分からなかった
Javaを書き始めたころ、
何度も出てきたのが
class と
new でした。
例えば、
Person person = new Person();
この1行を見ると、
Personって何?
personって何?
newって何をしているの?
と、最初はかなり混乱します。
でも、この1行を分解して考えると、 それほど難しいことをしているわけではありません。
01
まずは「Person」というクラス
例えば、人物を扱うプログラムを作るとします。
その人物を表すために、
Person というクラスを作ります。
class Person {
String name;
int age;
}
ここでは、
という「人物が持っている情報」を クラスの中に定義しています。
ここで大事なのは、
この時点では、まだ田中さんも佐藤さんも存在していない。
ということです。
02
クラスは「こういうものを作ります」という定義
Person クラスは、
「Personには名前と年齢があります」
という形を決めているだけです。
例えば、料理でいうなら レシピに近いイメージです。
Personクラス
├─ 名前を持つ
└─ 年齢を持つ
この「定義」を使って、 実際のPersonを作っていきます。
03
そこで出てくるのが「new」
実際にPersonを作るには、
new を使います。
Person person = new Person();
この1行を分けて考えてみます。
Person person;
これは、
person という名前で
Personを扱うための変数を用意しています。
そして、
new Person();
ここで実際にPersonのオブジェクトを作ります。
Person は「どういうものか」を表す。
new Person() は実際のPersonを作る。
person は、そのPersonを扱うための変数。
04
作ったPersonに情報を入れる
Personを作ったら、 そのオブジェクトに情報を入れることができます。
Person person = new Person();
person.name = "田中";
person.age = 30;
これで、
person は
田中さんの情報を持つPersonになります。
person
├─ name → 田中
└─ age → 30
ここで、
「変数person」と「Personオブジェクト」は同じものなのか?
という疑問が出てくるかもしれません。
このあたりは、 Javaを勉強していると最初につまずきやすいポイントの一つです。
05
「変数」と「オブジェクト」は分けて考える
例えば、
Person person = new Person();
と書いた場合、
person は
Personそのものというより、
作られたオブジェクトを扱うための変数です。
最初から細かい仕組みまで理解しようとすると かえって難しくなります。
Person = Personという種類
person = 作ったPersonを扱うための変数
new Person() = 実際のPersonを作る
まずはこの関係を押さえておけば、 実際のコードを読むときにかなり楽になります。
06
メソッドもクラスの中に入る
クラスには、 データだけではなく 「処理」も定義できます。
class Person {
String name;
int age;
void introduce() {
System.out.println(
"私は" + name + "です"
);
}
}
そして、
Person person = new Person();
person.name = "田中";
person.age = 30;
person.introduce();
とすると、
作ったPersonに対して
introduce() を実行できます。
つまりクラスの中には、
というものが入っています。
07
Personは1人だけとは限らない
ここまで理解すると、 次にListの記事につながります。
例えば、
Person person1 = new Person();
person1.name = "田中";
Person person2 = new Person();
person2.name = "佐藤";
とすれば、 Personオブジェクトを2つ作ることができます。
person1 → Person(田中)
person2 → Person(佐藤)
さらに、これらをListに入れることもできます。
List<Person> persons =
new ArrayList<>();
persons.add(person1);
persons.add(person2);
これが、
List<Person>
という形につながります。
「Listの中に何が入っているのか分からない」 という場合も、 まずはこの関係を思い出すと整理しやすくなります。
FIELD NOTE
Javaのコードが急に分からなくなる理由
Javaを書いていると、
List<Person> persons
のようなコードが普通に出てきます。
初めて見ると、 いろいろなものが一気に出てきて 分かりにくく感じます。
でも、一つずつ分解すると、 やっていることは意外と単純です。
List
↓
複数のデータを持つ
Person
↓
人物を表すクラス
Personオブジェクト
↓
実際の田中さん、佐藤さん
Javaのコードが読みにくいと感じたときは、 いきなり全部理解しようとせず、 「これは何を表しているのか?」 と一つずつ分解してみると、 意外と見えてくることがあります。
SUMMARY
今回のポイント
クラスとオブジェクトは、 Javaを書くうえで非常によく出てくる考え方です。
まずは、
クラス
→ どういうものかを定義する
new
→ 実際のオブジェクトを作る
オブジェクト
→ 実際に作られたもの
変数
→ そのオブジェクトを扱うための名前
くらいのイメージから始めれば十分です。
そして、
クラス → オブジェクト → List
という流れが見えてくると、 Javaのコードが少しずつ読みやすくなってきます。
ここまで理解できれば、 「オブジェクト指向とは何なのか」を いきなり難しく考える必要はありません。
まずは、 「データや処理をクラスとしてまとめ、 それをオブジェクトとして扱う」 というところから始めれば十分です。