クラスとインスタンスの違いを初心者向けに解説
新人
「先輩、Javaの勉強をしていたら“クラス”とか“インスタンス”って出てきたんですが、どう違うのかよくわかりません…」
先輩
「いい質問だね。クラスとインスタンスはJavaのオブジェクト指向においてとても重要な考え方なんだ。」
新人
「でも、難しそうでちょっと不安です…初心者にもわかりやすく教えてもらえますか?」
先輩
「もちろん!クラスとインスタンスの違いを日常の例も交えて、やさしく説明するね。」
1. クラスとは何か?(やさしく具体的に解説)
Javaにおける「クラス」とは、プログラムの中で何かを表すための設計図のようなものです。たとえば、「人間」というクラスを作るとすれば、その中には「名前」や「年齢」といった情報と、「歩く」「話す」といった行動を定義することができます。
このように、クラスは「データ(変数)」と「処理(メソッド)」をひとまとめにしたものであり、実際のプログラムではまずこのクラスを定義しておくことで、あとから使い回すことができるようになります。
Javaでは、次のようにクラスを定義します。
public class Person {
String name;
int age;
void introduce() {
System.out.println("こんにちは、私の名前は" + name + "です。");
}
}
この例では、「Person(人)」というクラスを作っています。中には名前や年齢、そして自己紹介するためのintroduce()メソッドがあります。これがまさに「設計図」としての役割を持つのです。
でも、この時点ではまだ「人」というものを作っていません。次の「インスタンス」という考え方で、実際に人を作っていきます。
2. インスタンスとは何か?(日常生活に例えて説明)
「インスタンス」というのは、「クラス(設計図)」をもとにして、実際に作られた“モノ”のことです。日常生活で考えてみましょう。たとえば「車の設計図」があったとしても、それだけでは道路を走ることはできませんよね。でも、その設計図をもとに実際の車を作れば、道路を走れるようになります。
この「実際に作られた車」が「インスタンス」にあたります。Javaでも同じように、クラスだけでは動きません。クラスをもとにして、インスタンスを作って初めて使うことができます。
次のようにして、Javaではインスタンスを作ります。
public class Main {
public static void main(String[] args) {
Person p = new Person(); // インスタンスの生成
p.name = "たろう";
p.age = 20;
p.introduce(); // メソッドの呼び出し
}
}
こんにちは、私の名前はたろうです。
このコードでは、new Person()と書くことで、Personクラスのインスタンス(実体)をひとつ作っています。そして、そのインスタンスに名前や年齢の情報を入れたり、introduce()メソッドを使ったりしています。
つまり、「クラス」はあくまで“共通の型”や“設計図”であって、実際に使うためには「インスタンス」という形にしなければなりません。
インスタンスを使うことで、同じクラスをもとに複数のオブジェクトを作ることもできます。たとえば、「たろうさん」と「はなこさん」を同じPersonクラスから作ることも可能です。
Person p1 = new Person();
p1.name = "たろう";
Person p2 = new Person();
p2.name = "はなこ";
p1.introduce();
p2.introduce();
こんにちは、私の名前はたろうです。
こんにちは、私の名前ははなこです。
このように、「クラス」は共通の型、「インスタンス」は実際に使うための“モノ”として覚えておくと、理解しやすくなります。次回は、クラスとインスタンスの関係について、設計図と実物という視点からさらに詳しく見ていきましょう。
3. クラスとインスタンスの関係(設計図と実物のイメージ)
ここまでで、「クラス」は設計図、「インスタンス」はその設計図から作られた実物ということがわかってきたと思います。でも、これだけだとまだ少しぼんやりしたままの人もいるかもしれません。そこで、もう少し具体的に「設計図と実物」の関係についてイメージしてみましょう。
たとえば、「椅子(いす)」のクラスがあったとします。このクラスには「高さ」や「色」といった情報と、「座る」という動作が含まれているとしましょう。この時点ではまだ「椅子そのもの」は存在していません。あるのは「椅子をどう作るか」というルールや構造だけです。
この「ルール」をもとにして、実際に「高さが40センチで赤色の椅子」や「高さが45センチで青色の椅子」といった具体的な椅子を作ったとき、それらがインスタンスです。つまり、「クラス」はたくさんのインスタンスを作るための“ひな型”として使われるのです。
Javaのオブジェクト指向プログラミングでは、このようにクラスとインスタンスを使い分けることで、同じような構造のデータを何個も簡単に作れるようになります。これは非常に便利で、コードの再利用や管理がしやすくなるという大きなメリットがあります。
たとえば、「社員」や「生徒」といったクラスを使って、何人もの情報をそれぞれのインスタンスで表現することができます。クラスで共通の動作やデータ構造をまとめておき、インスタンスでそれぞれの違いを表す。この使い方がJavaの基本になります。
次の章では、Pleiadesを使って実際にJavaのコードでクラスとインスタンスの動きを確認できる例を紹介します。初心者の方でも迷わず書けるように、シンプルでやさしいコードを使って説明していきます。
4. Javaでクラスとインスタンスを使った基本コード例
それでは、実際にJavaで「クラス」と「インスタンス」を使ったコードを書いてみましょう。開発環境は、Pleiadesを使うことを前提としています。
まずは、「Dog(犬)」というクラスを作ります。犬には名前があり、鳴くという動作がありますよね。その内容をクラスとして定義します。
// 犬クラス(クラスの定義)
public class Dog {
String name;
void bark() {
System.out.println(name + "がワンワンと鳴きました!");
}
}
このクラスでは、犬の名前を記録するための変数nameと、「鳴く」動作を表すbark()メソッドがあります。ただし、これはまだ設計図の段階なので、実際には何も起こりません。
このクラスからインスタンスを作って、はじめて犬が登場します。以下は、実際に犬を登場させるメインクラスのコードです。
// Mainクラス(実行する場所)
public class Main {
public static void main(String[] args) {
Dog d1 = new Dog(); // インスタンスを作成
d1.name = "ポチ";
d1.bark(); // → ポチがワンワンと鳴きました!
Dog d2 = new Dog(); // もう1匹作成
d2.name = "コロ";
d2.bark(); // → コロがワンワンと鳴きました!
}
}
ポチがワンワンと鳴きました!
コロがワンワンと鳴きました!
このコードでは、「Dog」クラスを使って2匹の犬のインスタンス(d1とd2)を作っています。そしてそれぞれの犬に名前をつけてから、bark()メソッドを呼び出しています。
このように、クラスをもとに複数のインスタンスを作ることで、同じ構造をもったオブジェクトを何個でも扱うことができます。これがJavaのオブジェクト指向プログラミングの基本であり、とても重要な考え方です。
インスタンスを作るときには、newというキーワードを使います。これは「新しく作る」という意味で、Javaではインスタンスを作るときの決まり文句です。
初心者の方は、まずこの「クラスは設計図、インスタンスは実物」という考え方をしっかり身につけてください。最初は少し混乱するかもしれませんが、何度かコードを書いているうちに自然と理解できるようになります。
また、クラスとインスタンスをしっかり使いこなせるようになると、Javaの他の重要な仕組み(継承やポリモーフィズムなど)も理解しやすくなっていきます。次回は、これらの基礎をもとに、オブジェクト指向の世界をさらに深く学んでいきましょう。
5. クラスとインスタンスの違いを表にして整理
ここまで「クラス」と「インスタンス」について、それぞれの意味や関係を詳しく見てきました。ただ、初心者の方にとってはまだ少し曖昧な部分があるかもしれません。そこで、クラスとインスタンスの違いを表にまとめて、見やすく整理してみましょう。
| 項目 | クラス | インスタンス |
|---|---|---|
| 意味 | 設計図・ひな型 | 設計図から作られた実物 |
| 役割 | 共通の構造や動作を定義 | 実際に動作し、データを持つ |
| 作成方法 | class クラス名で定義 |
new クラス名()で生成 |
| 存在のタイミング | プログラムを書く時点で存在 | プログラムが実行されたときに作られる |
| 具体性 | 抽象的(実体がない) | 具体的(中身がある) |
| 例 | 「犬」という種類の説明 | 実際の「ポチ」「コロ」などの犬 |
このように表で見比べることで、クラスとインスタンスの違いがはっきりと見えてきます。Javaのオブジェクト指向では、まずクラスを作り、それをもとにしてインスタンスを生成し、プログラムを動かしていくという流れが基本です。
6. 初心者がつまずきやすいポイントとアドバイス
Javaの学習を始めたばかりの初心者の方が「クラス」と「インスタンス」でつまずきやすいポイントはいくつかあります。ここでは、よくある悩みとその対策を紹介します。
・newって何?
「new」というキーワードは、「新しく作る」という意味です。クラスからインスタンスを作るときに必ず使います。最初は意味がわからなくても、「インスタンスを作るときはnewが必要なんだ」と覚えておけば大丈夫です。
・クラスだけじゃダメなの?
クラスはあくまで設計図です。クラスだけでは何も実行できません。実際に動かすためには、そのクラスからインスタンスを作る必要があります。これは「設計図だけでは車が走らない」のと同じイメージです。
・同じクラスから何個も作れるの?
はい、できます。クラスは何度でも使えるひな型なので、同じクラスからいくつでもインスタンスを作ることができます。たとえば、「Dog」クラスから「ポチ」も「コロ」も作れます。
・インスタンスを作る意味がわからない
インスタンスを作ることで、個別のデータや動作を持たせることができます。たとえば、「ポチ」と「コロ」は名前が違いますよね。このような個別の違いを表現するには、インスタンスが必要なのです。
・練習のコツ
まずは、クラスを1つ作って、それを使ってインスタンスを作る練習をしてみましょう。そして、インスタンスに名前や年齢などのデータを入れて、メソッドで表示してみるだけでも十分です。少しずつで構いません。
PleiadesでJavaのコードを何度も書いて実行していくうちに、「なるほど、こうやって動くのか!」と実感できるタイミングがきます。焦らず、コツコツと取り組んでみましょう。
7. まとめ(やさしい励ましと復習)
ここまで「クラス」と「インスタンス」の違いについて、初心者向けにやさしく丁寧に説明してきました。
- クラスは「設計図」
- インスタンスは「設計図から作られた実物」
- Javaでは、クラスを使って共通の構造を定義し、インスタンスで実際の動作やデータを扱う
Javaのオブジェクト指向では、このクラスとインスタンスの考え方がとても重要な基礎になります。最初は少し難しく感じるかもしれませんが、何度も書いて、実行してみることで、少しずつ理解できるようになります。
「自分には無理かも…」と思う瞬間があっても大丈夫です。誰でも最初は初心者です。Pleiadesを使って、実際に手を動かしていけば、必ず身についていきます。
まずは簡単なクラスを作って、そこから一歩ずつ「インスタンスを使ってみる」ことを意識して、Javaのオブジェクト指向の世界を楽しんでください。