プログラミングファン

「Java言語」の「コンストラクタ」の仕組みを学ぶ

今回は「コンストラクタ」の仕組みを学んでいきたいと思います。

この仕組みも前に勉強したんですが、100%忘れてしまっていたので、思い返しながら学んでいきたいと思います。

学んだことを忘れないように、ちゃんとプログラムを書く習慣を身に付けていかないと・・・

「コンストラクタ」の作り方と仕組み

「クラス」から「インスタンス」を作る時に「初期値」を設定したり、必要な処理を行うことができる仕組みが「コンストラクタ」です。

コンストラクタの作り方

「コンストラクタ」は、

public クラス名(引数){
    実行する処理
}

のように作ります。

今回は「りんご」をテーマにクラスを作ってみました。

public class Apple {
    String rank;
    int price;

    //コンストラクタ
    public Apple(String rank, int price) {
        this.rank = rank;
        this.price = price;
    }

    public void displayData() {
        System.out.println("ランク:" + this.rank + " 価格:" + this.price);
    }
}

「コンストラクタ」では、「引数」で受け取った「りんごのランクと価格」をフィールドに設定しています。

コンストラクタの実行

「インスタンス」を作ると同時に自動的に「コンストラクタ」が実行されます。

例えば、

Apple apple_1 = new Apple("S", 500);
Apple apple_2 = new Apple("A", 380);

のように「new」で「インスタンス」を作った時点で「コンストラクタ」が実行され、「フィールド」に値が設定されています。

apple_1.displayData();
apple_2.displayData();

のように「インスタンス」の「フィールド値」を表示してみると、

ランク:S 価格:500
ランク:A 価格:380

のように表示され、「フィールド」に「コンストラクタ」の引数に渡した値が設定されているのが確認できます。

「コンストラクタ」も動画で解説していますので、ご覧ください。

複数のコンストラクタの作成方法

1つのクラスの中に「複数のコンストラクタ」を作ることができます。

先ほどの「Apple」クラスに「りんごの産地」を表す「origin」フィールドを追加し、初期値に「日本」を設定しておきます。

String origin = "日本";

そして、2つ目の「コンストラクタ」を「Apple」クラスに作成します。

//コンストラクタ
public Apple(String rank, int price, String origin) {
    this.rank = rank;
    this.price = price;
    this.origin = origin;
}

3つ目の「引数」に「産地」を指定すれば「産地」を変更することができます。

例えば、

Apple apple_3 = new Apple("A", 350, "米国");

のように「インスタンス」を作って、

apple_3.displayData();

のように実行すると、

ランク:A 価格:350産地:米国

のように表示されます。

「displayData」メソッドも

public void displayData() {
    System.out.println("ランク:" + this.rank + " 価格:" + this.price + " 産地:" + origin);
}

のように「産地」の表示処理を追加しています。

「origin」フィールドの初期設定値は「日本」という値ですが、「コンストラクタ」で「origin」フィールドの値を設定することもできます。

このように「コンストラクタ」の「引数のデータ型や個数」が異なる場合は、「複数のコンストラクタ」を作ることができます。

「this」キーワード

「コンストラクタ」内から、同じクラスの「別のコンストラクタ」を呼び出すこともできます。

//1つ目のコンストラクタ
public Apple(String rank, int price) {
    this.rank = rank;
    this.price = price;
}

//2つ目のコンストラクタ
public Apple(String rank, int price, String origin) {
    this(rank, price);    //「this」キーワードで1つ目の「コンストラクタ」を呼び出す
    this.origin = origin;
}

2つ目の「コンストラクタ」内の

this(rank, price);

の「this」キーワードで1つ目の「コンストラクタ」を呼び出しています。

「コンストラクタ」の「引数のデータ型」を判定して自動で「コンストラクタ」を呼び出し分けてくれます。

→(前へ)「Java言語」の「カプセル化」の仕組み

→(次へ)「Java言語」の「継承」の仕組み

HOMEへ