【完全理解①】人間=山田さん?で考えるクラスとインスタンス
オブジェクト指向を学び始めたとき、多くの人がつまずくのが
- クラス
- インスタンス
の違いです。
「設計図と実物」と言われても、
いまいちピンとこない人も多いでしょう。
そこで今回は、できるだけシンプルな例で考えてみます。
人間 = 山田さん?
次の式を見てください。
人間 = 山田さん
一見、間違っていないようにも思えます。
山田さんは人間です。
でも、本当に「=(イコール)」でしょうか?
もしこれが本当にイコールなら、
人間 = 佐藤さん
も成り立ちます。
すると、
山田さん = 佐藤さん
も成り立ってしまいます。
これは明らかにおかしいですね。
何が違うのでしょうか?
ポイントはここです。
- 「人間」は種類(抽象)
- 「山田さん」はその中の1人(具体)
つまり、
山田さんは「人間そのもの」ではありません。
正しくは、
山田さんは人間である
という関係です。
これは「同じ」という意味ではなく、
「ある種類に属している」という意味です。
抽象と具体の違い
「人間」という言葉は、とても抽象的です。
年齢も、性格も、身長も決まっていません。
しかし「山田さん」と言った瞬間、
- 名前があり
- 年齢があり
- 性格があり
- 体格がある
具体的な存在になります。
この違いが、オブジェクト指向の出発点です。
これをプログラミングで考えると?
オブジェクト指向では、この関係を次のように表現します。
抽象(種類) → クラス
class Human
{
}
これは「人間という種類」を定義しているだけです。
まだ誰も存在していません。
ここが最初の重要ポイントです。
クラスを書いただけでは、実体は存在しません。
具体(実体) → インスタンス
Human yamada = new Human();
Human sato = new Human();
ここで初めて「実体」が生まれます。
- yamada は Human の1つ
- sato も Human の1つ
この「実際に作られた存在」を
インスタンスと呼びます。
クラスとインスタンスを一言で言うと
- クラス = 種類の定義
- インスタンス = その種類から作られた個体
設計図というより、
「種類」と「個体」
と考える方が分かりやすい人も多いでしょう。
なぜここが大事なのか?
この区別が曖昧だと、
- クラスだけで何かが動くと思ってしまう
- new の意味が分からない
- なぜ複数作れるのかが理解できない
といった混乱が起きます。
オブジェクト指向で苦しくなる人の多くは、
「抽象」が分からないのではなく、
抽象と具体を混同している
のです。
まとめ
- 「人間」は抽象(クラス)
- 「山田さん」は具体(インスタンス)
- 同じではない
- 属しているという関係
- クラスを書いただけでは実体は存在しない
ここが腑に落ちれば、
オブジェクト指向の第一関門は突破しています。
📌 次回予告
では、「new」とは何をしているのでしょうか?
次回は、実際にコードを動かしながら理解します。




ディスカッション
コメント一覧
まだ、コメントがありません