クラスとインスタンスの違いを初心者向けに解説
新人
「先輩、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のオブジェクト指向の世界を楽しんでください。
まとめ
Javaのクラスとインスタンスは、オブジェクト指向プログラミングを学ぶうえで最初につまずきやすい重要な考え方です。クラスは、データや処理をまとめて定義する設計図のようなものであり、インスタンスは、その設計図をもとに実際に作られた具体的なものです。Javaでは、クラスを定義しただけでは実際のデータを扱うことはできません。newを使ってインスタンスを生成することで、はじめて名前や年齢などの情報を入れたり、メソッドを呼び出して処理を実行したりできます。
たとえば、Personクラスは人を表すための共通の型です。その中にnameやageという変数を用意し、introduceというメソッドを定義しておけば、同じ仕組みを使って、たろうさん、はなこさん、じろうさんなど、複数のインスタンスを作ることができます。これにより、同じ構造を持つデータを効率よく管理できるようになります。Javaのクラスは共通のルールを決める場所であり、インスタンスは実際に値を持って動く存在だと理解すると、オブジェクト指向の基本がかなり分かりやすくなります。
プログラミング初心者の方は、クラスとインスタンスの違いを難しい言葉だけで覚えようとすると混乱しやすいです。まずは、クラスは設計図、インスタンスは実物というイメージで考えるのがおすすめです。車の設計図がクラスで、実際に走る車がインスタンスです。料理のレシピがクラスで、完成した料理がインスタンスです。このように日常生活の例に置き換えることで、Javaのオブジェクト指向プログラミングにおけるクラス、インスタンス、オブジェクト、フィールド、メソッドの関係が理解しやすくなります。
Javaでは、クラスの中に変数とメソッドをまとめることで、関連する情報と処理をひとつの部品として扱えます。これは、プログラムを読みやすくし、修正しやすくし、再利用しやすくするためにとても大切です。たとえば会員情報を扱う場合、会員名、年齢、メールアドレス、自己紹介処理などをひとつのクラスにまとめることで、プログラム全体の見通しがよくなります。インスタンスを複数作れば、同じクラスから別々の会員情報を管理することもできます。
クラスとインスタンスの関係を理解すると、Javaの学習は次の段階へ進みやすくなります。コンストラクタ、カプセル化、継承、ポリモーフィズム、メソッド呼び出し、フィールドの使い方なども、すべてクラスとインスタンスの理解が土台になります。Java入門では、最初に文法を覚えることも大切ですが、なぜクラスを作るのか、なぜインスタンスを生成するのか、なぜオブジェクトとして扱うのかを意識することで、実務に近いプログラムの考え方が身につきます。
クラスとインスタンスの復習サンプル
次のサンプルでは、Studentクラスを定義し、そのクラスから複数のインスタンスを生成しています。同じStudentクラスを使っていても、それぞれのインスタンスは別々のnameとscoreを持つことができます。この違いを確認すると、クラスは共通の型であり、インスタンスは個別のデータを持つ実体であることが分かります。
public class Student {
String name;
int score;
void showInfo() {
System.out.println(name + "さんの点数は" + score + "点です。");
}
}
public class Main {
public static void main(String[] args) {
Student student1 = new Student();
student1.name = "たろう";
student1.score = 80;
Student student2 = new Student();
student2.name = "はなこ";
student2.score = 95;
student1.showInfo();
student2.showInfo();
}
}
たろうさんの点数は80点です。
はなこさんの点数は95点です。
この例では、Studentというひとつのクラスから、student1とstudent2という二つのインスタンスを作っています。student1にはたろうという名前と八十点という点数が入り、student2にははなこという名前と九十五点という点数が入っています。同じクラスから作られていても、それぞれのインスタンスは別々の値を持てるため、複数のデータを自然に扱うことができます。
Javaのクラス設計では、どのような情報をフィールドとして持たせるか、どのような処理をメソッドとして用意するかを考えることが重要です。最初は簡単な人、学生、商品、会員、注文などの例で練習すると、クラスとインスタンスの使い方が身につきやすくなります。特に、商品クラスから商品インスタンスを作る、会員クラスから会員インスタンスを作る、注文クラスから注文インスタンスを作るという考え方は、実際の業務システムでもよく使われます。
生徒
クラスとインスタンスの違いが、少しずつ分かってきました。クラスは設計図で、インスタンスはその設計図から作った実物という考え方ですね。
先生
その理解で大丈夫です。Javaでは、まずクラスを作り、そのクラスをもとにインスタンスを生成して使います。クラスだけでは具体的な値を持たないので、実際にデータを入れて動かすにはインスタンスが必要になります。
生徒
PersonクラスやStudentクラスを作っても、それだけではまだ一人の人や一人の学生が存在しているわけではないんですね。
先生
その通りです。Personクラスは人の共通ルールをまとめたものです。そこからnewを使ってインスタンスを作ることで、たろうさんやはなこさんのような具体的なデータを扱えるようになります。
生徒
同じクラスから複数のインスタンスを作れるのも大事なポイントですね。それぞれ名前や点数が違っても、同じメソッドを使えるのが便利だと思いました。
先生
はい。これがオブジェクト指向プログラミングの便利なところです。共通する仕組みはクラスにまとめ、個別の値はインスタンスごとに持たせます。そうすることで、プログラムの重複を減らし、読みやすく保守しやすいJavaコードを書けるようになります。
生徒
クラスの中にある変数はフィールドで、処理はメソッドでしたね。インスタンスを作ると、そのフィールドに値を入れて、メソッドを呼び出せるという流れも理解できました。
先生
よく整理できています。Java入門では、クラス、インスタンス、オブジェクト、フィールド、メソッドという言葉が何度も出てきます。最初は言葉が多く感じるかもしれませんが、設計図と実物の関係で考えると理解しやすくなります。
生徒
これからコンストラクタやカプセル化を学ぶときも、クラスとインスタンスの考え方が必要になりそうですね。
先生
その通りです。コンストラクタはインスタンスを作るときの初期設定に関係しますし、カプセル化はクラスの中のデータを安全に扱う考え方です。どちらもクラスとインスタンスの理解が土台になります。
生徒
まずは、クラスを作る、インスタンスを作る、値を入れる、メソッドを呼び出すという基本の流れを何度も練習してみます。
先生
それが一番大切です。Javaのクラスとインスタンスは、実際にコードを書いて動かすことで理解が深まります。人、学生、商品、会員など、身近なテーマでクラスを作り、複数のインスタンスを生成して動作を確認してみましょう。