Javaのクラスとインスタンスを徹底解説!初心者にもわかるオブジェクト指向
生徒
「Javaでクラスとインスタンスの違いがよくわからないんですが、どういう関係なんですか?」
先生
「クラスは設計図、インスタンスはその設計図を元に作られた実体のようなものですよ。具体例を見てみましょう。」
1. クラスとインスタンスの基礎
Javaでは、クラスはプログラムの設計図として機能します。一方、インスタンスはその設計図から実際に作られる具体的なデータを持つオブジェクトです。
例えば、次のコードを見てください。
public class Product {
private int price = 100;
public void setPrice(int price) {
this.price = price;
}
public int getPrice() {
return this.price;
}
}
このコードは、商品の価格を管理するための設計図(クラス)を定義しています。このクラスを元に、複数の商品のデータを作成することができます。
2. インスタンスを生成する方法
クラスからインスタンスを作るには、newキーワードを使います。以下の例を見てください。
public class Main {
public static void main(String[] args) {
Product item1 = new Product();
Product item2 = new Product();
item2.setPrice(200);
System.out.println(item1.getPrice());
}
}
このコードでは、Productクラスから2つのインスタンスを生成しています。それぞれのインスタンスは独立しており、別々のデータを保持できます。
3. 実行結果の解説
上記のプログラムを実行すると、以下のような結果が得られます。
100
理由を解説します。item1はデフォルト値の100のままです。一方で、item2は値を200に変更しましたが、item1には影響がありません。
4. クラスとインスタンスの関係を図解で理解
クラスとインスタンスの関係は以下のように理解できます。
- クラス:設計図
- インスタンス:設計図から作られた具体的なオブジェクト
以下はそのイメージです:
- クラスを基にインスタンスを作成
- インスタンス間でデータが独立
5. 初心者が理解すべきポイント
クラスとインスタンスの違いを理解するには、以下のポイントを押さえましょう。
- クラスは設計図であり、実際には動作しない
- インスタンスはメモリ上に生成される動作可能なオブジェクト
- インスタンスごとにデータが異なるため、柔軟なプログラムが可能
これらを意識すると、オブジェクト指向のプログラミングに慣れることができます。
6. フィールドとメソッドの役割
クラスには主にフィールドとメソッドという2つの要素があります。 フィールドはデータを保持するための変数であり、メソッドは処理を実行するための機能です。
次のコードを見てみましょう。
public class User {
String name; // フィールド
public void sayHello() { // メソッド
System.out.println("Hello " + name);
}
}
この例では、nameがフィールドでユーザーの名前を保持しています。
sayHelloメソッドは、その名前を使ってメッセージを表示する役割を持っています。
7. インスタンスごとにデータが分かれる仕組み
クラスから複数のインスタンスを作成した場合、それぞれのインスタンスは独立したデータを持ちます。 つまり、あるインスタンスの値を変更しても、他のインスタンスには影響しません。
次の例を確認してみましょう。
public class User {
String name;
}
public class Main {
public static void main(String[] args) {
User user1 = new User();
User user2 = new User();
user1.name = "Taro";
user2.name = "Hanako";
System.out.println(user1.name);
System.out.println(user2.name);
}
}
このプログラムでは、user1とuser2はそれぞれ別のインスタンスです。
そのため、名前のデータも独立して管理されます。
8. コンストラクタを使ったインスタンス初期化
インスタンスを作成するときに初期値を設定するには、コンストラクタを使用します。 コンストラクタは、インスタンス生成時に自動的に呼び出される特別なメソッドです。
次のコードを見てみましょう。
public class Product {
int price;
public Product(int price) {
this.price = price;
}
}
public class Main {
public static void main(String[] args) {
Product item = new Product(300);
System.out.println(item.price);
}
}
この例では、Productクラスのコンストラクタを使って、
インスタンス作成時に価格を設定しています。
コンストラクタを利用することで、オブジェクトの初期状態を簡単に管理できます。
まとめ
Javaのクラスとインスタンスは、オブジェクト指向プログラミングの基礎を理解する上で非常に重要な概念です。この記事では、クラスを設計図、インスタンスをその設計図から作られる実体と捉えることで、初心者にも分かりやすく説明しました。複数のインスタンスを生成して、それぞれが独立してデータを持つ仕組みが、柔軟なプログラムを実現する鍵です。
例えば、商品を管理するプログラムでは、Productクラスを使って、価格や名前などの商品ごとのデータを簡単に管理できます。以下のサンプルコードでは、複数のインスタンスが独立したデータを保持する様子を改めて確認しましょう。
public class Product {
private String name;
private int price;
public Product(String name, int price) {
this.name = name;
this.price = price;
}
public String getName() {
return this.name;
}
public int getPrice() {
return this.price;
}
}
public class Main {
public static void main(String[] args) {
Product item1 = new Product("Laptop", 1000);
Product item2 = new Product("Tablet", 500);
System.out.println(item1.getName() + " costs $" + item1.getPrice());
System.out.println(item2.getName() + " costs $" + item2.getPrice());
}
}
実行結果では、それぞれの商品が独立した情報を持つことが確認できます。これはクラスとインスタンスの仕組みによるものです。
Laptop costs $1000
Tablet costs $500
このように、クラスとインスタンスの関係を正しく理解することで、現実世界の事象をプログラムで表現する力が身に付きます。
生徒
「クラスとインスタンスの違いがよく分かりました!それぞれが独立しているから、データ管理がしやすいんですね。」
先生
「その通りです。オブジェクト指向の強みは、現実世界の物をプログラムで簡単にモデル化できるところです。」
生徒
「これから、インスタンスを使った応用的なプログラムにも挑戦してみます!」
先生
「いいですね。インスタンスを使いこなせば、複雑なプログラムもスムーズに作れるようになりますよ。」