Java でのコンストラクターのオーバーロード:概要とプログラム例
Java のコンストラクターとは?
コンストラクタ 新しく作成されたオブジェクトを初期化するために使用される特別なメソッドで、オブジェクトにメモリが割り当てられた直後に呼び出されます。オブジェクトの作成時に、オブジェクトを目的の値またはデフォルト値に初期化するために使用できます。コーダーがクラスのコンストラクターを記述することは必須ではありません。
クラスにユーザー定義のコンストラクターが提供されていない場合、コンパイラーはメンバー変数をデフォルト値に初期化します。
- 数値データ型は 0 に設定されています
- char データ型は null 文字 ('\0') に設定されます
- 参照変数が null に設定されている
このチュートリアルでは、次のことを学びます-
- コンストラクタを作成するためのルール
- Java でのコンストラクターのオーバーロード
- コンストラクターの連鎖
Java コンストラクターの作成規則
<オール>例 1 :Java で最初のコンストラクターを作成します
ステップ 1) 次のコンストラクター プログラムを Java エディターに入力します。
class Demo{ int value1; int value2; Demo(){ value1 = 10; value2 = 20; System.out.println("Inside Constructor"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); } public static void main(String args[]){ Demo d1 = new Demo(); d1.display(); } }
ステップ 2) Java でコンストラクター プログラムを保存、実行、コンパイルし、出力を確認します。
出力:
Inside Constructor Value1 === 10 Value2 === 20
Java でのコンストラクターのオーバーロード
Java コンストラクターのオーバーロードは、パラメーター リストが異なる任意の数のコンストラクターをクラスに含めることができる手法です。コンパイラは、リスト内のパラメーターの数とその型を考慮して、これらのコンストラクターを区別します。
クラス Account の有効なコンストラクターの例は
Account(int a); Account (int a,int b); Account (String a,int b);
例 2 :Java でのコンストラクターのオーバーロードを理解するには
ステップ 1) エディターにコードを入力します。
class Demo{ int value1; int value2; /*Demo(){ value1 = 10; value2 = 20; System.out.println("Inside 1st Constructor"); }*/ Demo(int a){ value1 = a; System.out.println("Inside 2nd Constructor"); } Demo(int a,int b){ value1 = a; value2 = b; System.out.println("Inside 3rd Constructor"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); } public static void main(String args[]){ Demo d1 = new Demo(); Demo d2 = new Demo(30); Demo d3 = new Demo(30,40); d1.display(); d2.display(); d3.display(); } }
ステップ 2) コードを保存、コンパイル、実行します。
ステップ 3) エラー =?。 Java コンストラクターのオーバーロードの次のステップに進む前に、エラーを試してデバッグしてください
ステップ 4) Java では、すべてのクラスにデフォルトのコンストラクターがあります。 class Demo のデフォルトのオーバーロード コンストラクタ Java Demo() です .このコンストラクターを提供しない場合、コンパイラーはコンストラクターを作成し、変数をデフォルト値に初期化します。例 1 に示すように、この既定のコンストラクターをオーバーライドして、変数を目的の値に初期化することができます。
ただし、Demo(int a) のようなパラメーター化されたコンストラクターを指定し、デフォルトのコンストラクター Java Demo() を使用する場合は、それを指定する必要があります。
つまり、Java のオーバーロード コンストラクターがオーバーライドされ、デフォルトのコンストラクター Java を使用する場合は、Java を指定する必要があります。
ステップ 5) 行番号 4-8 のコメントを外します。コードを保存、コンパイル、実行します。
コンストラクターの連鎖
基底クラスが子によって拡張されるシナリオを考えてみましょう。子クラスのオブジェクトが作成されるたびに、親クラスのコンストラクターが最初に呼び出されます。これはコンストラクタ チェーンと呼ばれます。
例 3: コンストラクターの連鎖を理解する
ステップ 1) 次のコードをエディターにコピーします。
class Demo{ int value1; int value2; Demo(){ value1 = 1; value2 = 2; System.out.println("Inside 1st Parent Constructor"); } Demo(int a){ value1 = a; System.out.println("Inside 2nd Parent Constructor"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); } public static void main(String args[]){ DemoChild d1 = new DemoChild(); d1.display(); } } class DemoChild extends Demo{ int value3; int value4; DemoChild(){ //super(5); value3 = 3; value4 = 4; System.out.println("Inside the Constructor of Child"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); System.out.println("Value1 === "+value3); System.out.println("Value2 === "+value4); } }
ステップ 2) コードを実行します。コンストラクタ連鎖により、子クラス DemoChild のオブジェクトが作成されると、親クラスのコンストラクタ Demo() が最初に呼び出され、その後に子クラスのコンストラクタ DemoChild() が作成されます。
期待される出力 =
Inside 1st Parent Constructor Inside the Constructor of Child Value1 === 1 Value2 === 2 Value1 === 3 Value2 === 4
ステップ 3) 親クラス Demo のコンストラクターがオーバーライドされていることがわかります。子オブジェクトの作成時に、デフォルトのコンストラクター Demo() の代わりにオーバーライドされたコンストラクター Demo(int a) を呼び出したい場合はどうしますか?
このような場合は、キーワード 「super」 を使用できます。 親クラスのオーバーライドされたコンストラクターを呼び出します。
構文:-
super(); --or-- super(parameter list);
例: コンストラクタが Demo(String Name,int a) のような場合 、super(“Java”,5) を指定します .使用する場合、キーワード super をコードの最初の行にする必要があります 子クラスのコンストラクターで。
ステップ 4) 26 行目のコメントを外して、コードを実行します。出力を観察してください。
出力:
Inside 2nd Parent Constructor Inside the Constructor of Child Value1 === 5 Value2 === 0 Value1 === 3 Value2 === 4
Java