「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つ目の「コンストラクタ」を呼び出しています。
「コンストラクタ」の「引数のデータ型」を判定して自動で「コンストラクタ」を呼び出し分けてくれます。