この記事では、Javaにおけるオブジェクト指向プログラミングの基本概念、特にインスタンスとクラスの関係について学ぶことができます。また、実際のプログラム例を通じて、これらの概念が実践でどのように適用されるかを理解できます。
はじめに
この記事のコードをコピペしてEclipseで出力結果を確認してみよう!
インスタンスとクラスの基本
クラスは、オブジェクトの設計図や型を定義するものです。クラスには、オブジェクトが持つ属性(フィールド)と振る舞い(メソッド)が記述されます。
インスタンスは、クラスから生成された実際のオブジェクトです。クラスを元に作られた具体的な実体と言えます。
例えば、「車」というクラスがあれば、「赤い車」「青い車」などの具体的な車がインスタンスになります。
プログラム例(車クラス)
「車」クラスとそのインスタンスを生成するプログラム例を紹介します。
Car.java
public class Car {
// フィールド(属性)
String color; // 車の色
int speed; // 車の速度
// メソッド(振る舞い)
void accelerate() {
speed += 10; // 速度を10増加
System.out.println("加速しました。現在の速度: " + speed + "km/h");
}
void brake() {
speed -= 10; // 速度を10減少
if (speed < 0) speed = 0; // 速度が0未満にならないようにする
System.out.println("減速しました。現在の速度: " + speed + "km/h");
}
}
CarExample.java
public class CarExample {
public static void main(String[] args) {
// インスタンスの生成
Car myCar = new Car(); // 自分の車のインスタンスを作成
Car friendCar = new Car(); // 友達の車のインスタンスを作成
// インスタンスの属性を設定
myCar.color = "赤";
myCar.speed = 0;
friendCar.color = "青";
friendCar.speed = 0;
// インスタンスのメソッドを呼び出す
System.out.println("私の" + myCar.color + "い車を操作します。");
myCar.accelerate();
myCar.accelerate();
myCar.brake();
System.out.println("\n友達の" + friendCar.color + "い車を操作します。");
friendCar.accelerate();
friendCar.brake();
}
}
出力結果:
私の赤い車を操作します。
加速しました。現在の速度: 10km/h
加速しました。現在の速度: 20km/h
減速しました。現在の速度: 10km/h
友達の青い車を操作します。
加速しました。現在の速度: 10km/h
減速しました。現在の速度: 0km/h
Car.javaの解説
クラス定義
public class Car {
// クラスの内容
}
この部分はCarクラスの定義です。public
キーワードはこのクラスが他のクラスからアクセス可能であることを示します。
フィールド(属性)
String color; // 車の色
int speed; // 車の速度
これらはクラスのフィールド(またはインスタンス変数)です。フィールドはオブジェクトの状態を表します。
color
: 車の色を表す文字列speed
: 車の速度を表す整数
accelerateメソッド
void accelerate() {
speed += 10; // 速度を10増加
System.out.println("加速しました。現在の速度: " + speed + "km/h");
}
このメソッドは車を加速させる動作を表します。
void
: 戻り値がないことを示します。speed += 10
: 速度を10km/h増加させます。System.out.println(...)
: 現在の速度を表示します。
brakeメソッド
void brake() {
speed -= 10; // 速度を10減少
if (speed < 0) speed = 0; // 速度が0未満にならないようにする
System.out.println("減速しました。現在の速度: " + speed + "km/h");
}
このメソッドは車を減速させる動作を表します。
speed -= 10
: 速度を10km/h減少させます。if (speed < 0) speed = 0;
: これは重要な安全チェックで、速度が負の値にならないようにします。System.out.println(...)
: 現在の速度を表示します。
重要なポイント:
- カプセル化: このクラスはデータ(フィールド)と、そのデータを操作するメソッドを1つの単位にまとめています。
- 状態と振る舞い:
color
とspeed
はオブジェクトの状態を表し、accelerate()
とbrake()
はオブジェクトの振る舞いを表します。 - データの整合性:
brake()
メソッド内のチェックは、オブジェクトの状態が常に有効であることを保証します。 - 抽象化: このクラスは車の基本的な特性と動作を抽象化しています。実際の車の複雑さを隠蔽し、プログラミングに適したシンプルなモデルを提供しています。
このCarクラスは、オブジェクト指向プログラミングの基本的な概念を実践的に示す良い例となっています。
CarExample.javaの解説
クラス定義
public class CarExample {
// クラスの内容
}
これはCarExampleクラスの定義です。このクラスはCar
クラスを使用してプログラムを実行するためのメインクラスです。
メインメソッド
public static void main(String[] args) {
// メソッドの内容
}
これはJavaプログラムのエントリーポイントです。プログラムの実行はここから始まります。
インスタンスの生成
Car myCar = new Car(); // 自分の車のインスタンスを作成
Car friendCar = new Car(); // 友達の車のインスタンスを作成
ここではCar
クラスの2つのインスタンスを作成しています。
myCar
: 自分の車を表すオブジェクトfriendCar
: 友達の車を表すオブジェクト
インスタンスの属性設定
myCar.color = "赤";
myCar.speed = 0;
friendCar.color = "青";
friendCar.speed = 0;
ここでは、作成したインスタンスの属性(フィールド)を初期化しています。
myCar
の色を赤に、速度を0に設定friendCar
の色を青に、速度を0に設定
インスタンスメソッドの呼び出し
System.out.println("私の" + myCar.color + "い車を操作します。");
myCar.accelerate();
myCar.accelerate();
myCar.brake();
System.out.println("\n友達の" + friendCar.color + "い車を操作します。");
friendCar.accelerate();
friendCar.brake();
この部分では、作成したインスタンスのメソッドを呼び出して操作しています。
myCar
に対して:
- 色を表示
- 2回加速(
accelerate()
) - 1回減速(
brake()
)
friendCar
に対して:
- 色を表示
- 1回加速
- 1回減速
重要なポイント:
- オブジェクトの生成:
new
キーワードを使用してCar
クラスのインスタンスを生成しています。 - 状態の設定: 各オブジェクトの
color
とspeed
フィールドに値を設定して、初期状態を定義しています。 - メソッドの呼び出し: ドット表記(
.
)を使用してオブジェクトのメソッドを呼び出しています。 - 独立したオブジェクト:
myCar
とfriendCar
は独立したオブジェクトで、それぞれ個別の状態を持ち、個別に操作されています。 - 実行の流れ: このプログラムは、オブジェクトの生成、初期化、そして操作という一連の流れを示しています。
このCarExampleクラスは、Car
クラスの使用方法を示す良い例となっており、オブジェクト指向プログラミングの基本的な概念(インスタンス化、状態の設定、メソッドの呼び出し)を実践的に示しています。
プログラム例(本クラス)
Book.java
class Book {
// フィールド(属性)
String title; // 本のタイトル
String author; // 著者名
int pageCount; // ページ数
// コンストラクタ
Book(String title, String author, int pageCount) {
this.title = title;
this.author = author;
this.pageCount = pageCount;
}
// メソッド(振る舞い)
void displayInfo() {
System.out.println("タイトル: " + title);
System.out.println("著者: " + author);
System.out.println("ページ数: " + pageCount);
}
boolean isLongBook() {
return pageCount > 300; // 300ページ以上を長編と定義
}
}
BookExample.java
public class BookExample {
public static void main(String[] args) {
// インスタンスの生成
Book book1 = new Book("Java入門", "山田太郎", 250);
Book book2 = new Book("データ構造とアルゴリズム", "鈴木花子", 450);
// インスタンスのメソッドを呼び出す
System.out.println("=== 本1の情報 ===");
book1.displayInfo();
System.out.println("長編書籍ですか? " + book1.isLongBook());
System.out.println("\n=== 本2の情報 ===");
book2.displayInfo();
System.out.println("長編書籍ですか? " + book2.isLongBook());
}
}
出力結果:
=== 本1の情報 ===
タイトル: Java入門
著者: 山田太郎
ページ数: 250
長編書籍ですか? false
=== 本2の情報 ===
タイトル: データ構造とアルゴリズム
著者: 鈴木花子
ページ数: 450
長編書籍ですか? true
Book.javaの解説
クラス定義
class Book {
// クラスの内容
}
これはBookクラスの定義です。このクラスは本を表現するためのものです。
フィールド(属性)
String title; // 本のタイトル
String author; // 著者名
int pageCount; // ページ数
これらはクラスのフィールド(インスタンス変数)です。これらのフィールドは本の基本的な属性を表現しています。
title
: 本のタイトルを表す文字列author
: 著者名を表す文字列pageCount
: ページ数を表す整数
コンストラクタ
Book(String title, String author, int pageCount) {
this.title = title;
this.author = author;
this.pageCount = pageCount;
}
これはBookクラスのコンストラクタです。
- コンストラクタはオブジェクトの初期化に使用されます。
this
キーワードは現在のオブジェクトを指します。- このコンストラクタは、本の基本情報(タイトル、著者、ページ数)を受け取り、それらをオブジェクトのフィールドに設定します。
displayInfoメソッド
void displayInfo() {
System.out.println("タイトル: " + title);
System.out.println("著者: " + author);
System.out.println("ページ数: " + pageCount);
}
このメソッドは本の情報を表示します。
void
は、このメソッドが値を返さないことを示します。- 本のタイトル、著者、ページ数を順に表示します。
isLongBookメソッド
boolean isLongBook() {
return pageCount > 300; // 300ページ以上を長編と定義
}
このメソッドは本が長編かどうかを判断します。
boolean
型を返すため、結果はtrueまたはfalseになります。- 300ページ以上を長編と定義し、その条件に基づいて判断します。
重要なポイント:
- カプセル化: このクラスは本に関するデータ(フィールド)と、そのデータを操作するメソッドを1つの単位にまとめています。
- コンストラクタ: コンストラクタにより、オブジェクト生成時に必要な情報を強制的に設定できます。
- メソッドの多様性:
displayInfo()
は情報を表示するだけですが、isLongBook()
は条件に基づいて判断を行い、結果を返します。これはメソッドの異なる役割を示しています。 - 抽象化: このクラスは本の基本的な特性と操作を抽象化しています。実際の本の複雑さを隠蔽し、プログラミングに適したシンプルなモデルを提供しています。
- 再利用性: このクラスは様々な本オブジェクトを作成するために再利用できます。
このBookクラスは、オブジェクト指向プログラミングの基本的な概念(カプセル化、抽象化、コンストラクタの使用、メソッドの定義)を実践的に示す良い例となっています。
BookExample.javaの解説
クラス定義
public class BookExample {
// クラスの内容
}
これはBookExampleクラスの定義です。このクラスはBook
クラスを使用してプログラムを実行するためのメインクラスです。
メインメソッド
public static void main(String[] args) {
// メソッドの内容
}
これはJavaプログラムのエントリーポイントです。プログラムの実行はここから始まります。
インスタンスの生成
Book book1 = new Book("Java入門", "山田太郎", 250);
Book book2 = new Book("データ構造とアルゴリズム", "鈴木花子", 450);
ここではBook
クラスの2つのインスタンスを作成しています。コンストラクタを使用して、各本のタイトル、著者、ページ数を初期化しています。
book1
: “Java入門”という本のオブジェクトbook2
: “データ構造とアルゴリズム”という本のオブジェクト
book1の情報表示
System.out.println("=== 本1の情報 ===");
book1.displayInfo();
System.out.println("長編書籍ですか? " + book1.isLongBook());
ここではbook1
オブジェクトのメソッドを呼び出して情報を表示しています。
displayInfo()
メソッドで本の基本情報を表示isLongBook()
メソッドで本が長編かどうかを判断し表示
book2の情報表示
System.out.println("\n=== 本2の情報 ===");
book2.displayInfo();
System.out.println("長編書籍ですか? " + book2.isLongBook());
同様にbook2
オブジェクトのメソッドを呼び出して情報を表示しています。
重要なポイント:
- オブジェクトの生成:
new
キーワードとコンストラクタを使用してBook
クラスのインスタンスを生成しています。 - パラメータ付きコンストラクタの使用: 各
Book
オブジェクトを生成する際に、タイトル、著者、ページ数を直接指定しています。 - メソッドの呼び出し: ドット表記(
.
)を使用してオブジェクトのメソッド(displayInfo()
とisLongBook()
)を呼び出しています。 - 独立したオブジェクト:
book1
とbook2
は独立したオブジェクトで、それぞれ個別の状態を持っています。 - メソッドの戻り値の使用:
isLongBook()
メソッドの戻り値(boolean)を直接出力文に組み込んでいます。 - 実行の流れ: このプログラムは、オブジェクトの生成、そしてそれらのオブジェクトの操作という一連の流れを示しています。
このBookExampleクラスは、Book
クラスの使用方法を示す良い例となっており、オブジェクト指向プログラミングの基本的な概念(インスタンス化、コンストラクタの使用、メソッドの呼び出し)を実践的に示しています。また、異なる本の情報を簡単に管理し表示できることを示しており、オブジェクト指向プログラミングの利点を明確に表現しています。
まとめ
- クラスは設計図、インスタンスは実体という関係性
- 車クラス(Car.java)と本クラス(Book.java)の例を通じて、クラスの定義方法
- CarExample.javaとBookExample.javaを通じて、インスタンスの生成と使用方法
- フィールドとメソッドの定義、アクセス方法を実践的に学習
- オブジェクト指向プログラミングの基本原則を実際のコードで確認
Javaプログラミングにおいて、クラスとインスタンスの概念を理解することは非常に重要です。クラスは属性(フィールド)と振る舞い(メソッド)を定義する設計図であり、インスタンスはそのクラスに基づいて生成された具体的なオブジェクトです。
Car.javaとBook.javaは、クラスの構造、フィールドの定義、メソッドの実装について詳しく理解できます。
一方、CarExample.javaとBookExample.javaは、実際にクラスを使用してインスタンスを生成し、操作する方法を学ぶことができます。
コメント