Javaの基礎Java

Javaの基礎:インスタンスとクラスを解説

Javaインスタンスとクラス解説ページのアイキャッチ画像 Javaの基礎

この記事では、Javaにおけるオブジェクト指向プログラミングの基本概念、特にインスタンスとクラスの関係について学ぶことができます。また、実際のプログラム例を通じて、これらの概念が実践でどのように適用されるかを理解できます。

はじめに

この記事のコードをコピペしてEclipseで出力結果を確認してみよう

インスタンスとクラスの基本

クラスは、オブジェクトの設計図や型を定義するものです。クラスには、オブジェクトが持つ属性(フィールド)振る舞い(メソッド)が記述されます。

インスタンスは、クラスから生成された実際のオブジェクトです。クラスを元に作られた具体的な実体と言えます。

例えば、「車」というクラスがあれば、「赤い車」「青い車」などの具体的な車がインスタンスになります。

プログラム例(車クラス)

「車」クラスとそのインスタンスを生成するプログラム例を紹介します。

Car.java

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

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の解説

クラス定義

Java
public class Car {
    // クラスの内容
}

この部分はCarクラスの定義です。publicキーワードはこのクラスが他のクラスからアクセス可能であることを示します。

フィールド(属性)

Java
String color;  // 車の色
int speed;     // 車の速度

これらはクラスのフィールド(またはインスタンス変数)です。フィールドはオブジェクトの状態を表します。

  • color: 車の色を表す文字列
  • speed: 車の速度を表す整数

accelerateメソッド

Java
void accelerate() {
    speed += 10;  // 速度を10増加
    System.out.println("加速しました。現在の速度: " + speed + "km/h");
}

このメソッドは車を加速させる動作を表します。

  • void: 戻り値がないことを示します。
  • speed += 10: 速度を10km/h増加させます。
  • System.out.println(...): 現在の速度を表示します。

brakeメソッド

Java
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. カプセル化: このクラスはデータ(フィールド)と、そのデータを操作するメソッドを1つの単位にまとめています。
  2. 状態と振る舞い: colorspeedはオブジェクトの状態を表し、accelerate()brake()はオブジェクトの振る舞いを表します。
  3. データの整合性: brake()メソッド内のチェックは、オブジェクトの状態が常に有効であることを保証します。
  4. 抽象化: このクラスは車の基本的な特性と動作を抽象化しています。実際の車の複雑さを隠蔽し、プログラミングに適したシンプルなモデルを提供しています。

このCarクラスは、オブジェクト指向プログラミングの基本的な概念を実践的に示す良い例となっています。

CarExample.javaの解説

クラス定義

Java
public class CarExample {
    // クラスの内容
}

これはCarExampleクラスの定義です。このクラスはCarクラスを使用してプログラムを実行するためのメインクラスです。

メインメソッド

Java
public static void main(String[] args) {
    // メソッドの内容
}

これはJavaプログラムのエントリーポイントです。プログラムの実行はここから始まります。

インスタンスの生成

Java
Car myCar = new Car();  // 自分の車のインスタンスを作成
Car friendCar = new Car();  // 友達の車のインスタンスを作成

ここではCarクラスの2つのインスタンスを作成しています。

  • myCar: 自分の車を表すオブジェクト
  • friendCar: 友達の車を表すオブジェクト

インスタンスの属性設定

Java
myCar.color = "赤";
myCar.speed = 0;

friendCar.color = "青";
friendCar.speed = 0;

ここでは、作成したインスタンスの属性(フィールド)を初期化しています。

  • myCarの色を赤に、速度を0に設定
  • friendCarの色を青に、速度を0に設定

インスタンスメソッドの呼び出し

Java
System.out.println("私の" + myCar.color + "い車を操作します。");
myCar.accelerate();
myCar.accelerate();
myCar.brake();

System.out.println("\n友達の" + friendCar.color + "い車を操作します。");
friendCar.accelerate();
friendCar.brake();

この部分では、作成したインスタンスのメソッドを呼び出して操作しています。

  • myCarに対して:
  1. 色を表示
  2. 2回加速(accelerate()
  3. 1回減速(brake()
  • friendCarに対して:
  1. 色を表示
  2. 1回加速
  3. 1回減速

重要なポイント:

  1. オブジェクトの生成: new キーワードを使用してCarクラスのインスタンスを生成しています。
  2. 状態の設定: 各オブジェクトのcolorspeedフィールドに値を設定して、初期状態を定義しています。
  3. メソッドの呼び出し: ドット表記(.)を使用してオブジェクトのメソッドを呼び出しています。
  4. 独立したオブジェクト: myCarfriendCarは独立したオブジェクトで、それぞれ個別の状態を持ち、個別に操作されています。
  5. 実行の流れ: このプログラムは、オブジェクトの生成、初期化、そして操作という一連の流れを示しています。

このCarExampleクラスは、Carクラスの使用方法を示す良い例となっており、オブジェクト指向プログラミングの基本的な概念(インスタンス化、状態の設定、メソッドの呼び出し)を実践的に示しています。

プログラム例(本クラス)

Book.java

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

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の解説

クラス定義

Java
class Book {
    // クラスの内容
}

これはBookクラスの定義です。このクラスは本を表現するためのものです。

フィールド(属性)

Java
String title;    // 本のタイトル
String author;   // 著者名
int pageCount;   // ページ数

これらはクラスのフィールド(インスタンス変数)です。これらのフィールドは本の基本的な属性を表現しています。

  • title: 本のタイトルを表す文字列
  • author: 著者名を表す文字列
  • pageCount: ページ数を表す整数

コンストラクタ

Java
Book(String title, String author, int pageCount) {
    this.title = title;
    this.author = author;
    this.pageCount = pageCount;
}

これはBookクラスのコンストラクタです。

  • コンストラクタはオブジェクトの初期化に使用されます。
  • thisキーワードは現在のオブジェクトを指します。
  • このコンストラクタは、本の基本情報(タイトル、著者、ページ数)を受け取り、それらをオブジェクトのフィールドに設定します。

displayInfoメソッド

Java
void displayInfo() {
    System.out.println("タイトル: " + title);
    System.out.println("著者: " + author);
    System.out.println("ページ数: " + pageCount);
}

このメソッドは本の情報を表示します。

  • voidは、このメソッドが値を返さないことを示します。
  • 本のタイトル、著者、ページ数を順に表示します。

isLongBookメソッド

Java
boolean isLongBook() {
    return pageCount > 300;  // 300ページ以上を長編と定義
}

このメソッドは本が長編かどうかを判断します。

  • boolean型を返すため、結果はtrueまたはfalseになります。
  • 300ページ以上を長編と定義し、その条件に基づいて判断します。

重要なポイント:

  1. カプセル化: このクラスは本に関するデータ(フィールド)と、そのデータを操作するメソッドを1つの単位にまとめています。
  2. コンストラクタ: コンストラクタにより、オブジェクト生成時に必要な情報を強制的に設定できます。
  3. メソッドの多様性: displayInfo()は情報を表示するだけですが、isLongBook()は条件に基づいて判断を行い、結果を返します。これはメソッドの異なる役割を示しています。
  4. 抽象化: このクラスは本の基本的な特性と操作を抽象化しています。実際の本の複雑さを隠蔽し、プログラミングに適したシンプルなモデルを提供しています。
  5. 再利用性: このクラスは様々な本オブジェクトを作成するために再利用できます。

このBookクラスは、オブジェクト指向プログラミングの基本的な概念(カプセル化、抽象化、コンストラクタの使用、メソッドの定義)を実践的に示す良い例となっています。

BookExample.javaの解説

クラス定義

Java
public class BookExample {
    // クラスの内容
}

これはBookExampleクラスの定義です。このクラスはBookクラスを使用してプログラムを実行するためのメインクラスです。

メインメソッド

Java
public static void main(String[] args) {
    // メソッドの内容
}

これはJavaプログラムのエントリーポイントです。プログラムの実行はここから始まります。

インスタンスの生成

Java
Book book1 = new Book("Java入門", "山田太郎", 250);
Book book2 = new Book("データ構造とアルゴリズム", "鈴木花子", 450);

ここではBookクラスの2つのインスタンスを作成しています。コンストラクタを使用して、各本のタイトル、著者、ページ数を初期化しています。

  • book1: “Java入門”という本のオブジェクト
  • book2: “データ構造とアルゴリズム”という本のオブジェクト

book1の情報表示

Java
System.out.println("=== 本1の情報 ===");
book1.displayInfo();
System.out.println("長編書籍ですか? " + book1.isLongBook());

ここではbook1オブジェクトのメソッドを呼び出して情報を表示しています。

  • displayInfo()メソッドで本の基本情報を表示
  • isLongBook()メソッドで本が長編かどうかを判断し表示

book2の情報表示

Java
System.out.println("\n=== 本2の情報 ===");
book2.displayInfo();
System.out.println("長編書籍ですか? " + book2.isLongBook());

同様にbook2オブジェクトのメソッドを呼び出して情報を表示しています。

重要なポイント:

  1. オブジェクトの生成: new キーワードとコンストラクタを使用してBookクラスのインスタンスを生成しています。
  2. パラメータ付きコンストラクタの使用: 各Bookオブジェクトを生成する際に、タイトル、著者、ページ数を直接指定しています。
  3. メソッドの呼び出し: ドット表記(.)を使用してオブジェクトのメソッド(displayInfo()isLongBook())を呼び出しています。
  4. 独立したオブジェクト: book1book2は独立したオブジェクトで、それぞれ個別の状態を持っています。
  5. メソッドの戻り値の使用: isLongBook()メソッドの戻り値(boolean)を直接出力文に組み込んでいます。
  6. 実行の流れ: このプログラムは、オブジェクトの生成、そしてそれらのオブジェクトの操作という一連の流れを示しています。

このBookExampleクラスは、Bookクラスの使用方法を示す良い例となっており、オブジェクト指向プログラミングの基本的な概念(インスタンス化、コンストラクタの使用、メソッドの呼び出し)を実践的に示しています。また、異なる本の情報を簡単に管理し表示できることを示しており、オブジェクト指向プログラミングの利点を明確に表現しています。

まとめ

  • クラスは設計図インスタンスは実体という関係性
  • 車クラス(Car.java)と本クラス(Book.java)の例を通じて、クラスの定義方法
  • CarExample.javaとBookExample.javaを通じて、インスタンスの生成と使用方法
  • フィールドとメソッドの定義、アクセス方法を実践的に学習
  • オブジェクト指向プログラミングの基本原則を実際のコードで確認

Javaプログラミングにおいて、クラスとインスタンスの概念を理解することは非常に重要です。クラスは属性(フィールド)と振る舞い(メソッド)を定義する設計図であり、インスタンスはそのクラスに基づいて生成された具体的なオブジェクトです。

Car.javaとBook.javaは、クラスの構造、フィールドの定義、メソッドの実装について詳しく理解できます。

一方、CarExample.javaとBookExample.javaは、実際にクラスを使用してインスタンスを生成し、操作する方法を学ぶことができます。

未経験でもWEBスキルを取得したい方
  • Javaコース
    Javaプログラミングを基礎から応用まで、体系的に学べる実践的なカリキュラムが特徴です。「マインクラフト」を通じてJavaの基本文法とフレームワークの概念を学びます。また、実際のプロジェクト開発を通じて、データベース連携やWebアプリケーション開発のスキルを身につけることができます。

コメント

タイトルとURLをコピーしました