コンストラクタのオーバーロード Java

コンストラクタのオーバーロードとは Java?

Java コンストラクタのオーバーロードは、クラスがパラメータ リストの異なる任意の数のコンストラクタを持つことができる手法です。コンパイラは、リスト内のパラメータの数とその型を考慮して、これらのコンストラクタを区別します。

Accountクラスの有効なコンストラクタの例は以下のとおりです。

Account(int a);
Account (int a,int b);
Account (String a,int b);

: コンストラクタのオーバーロードを理解する 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. デフォルトのオーバーロードされたコンストラクタ Java の クラスのデモ is デモ()。 このコンストラクターを指定しない場合は、コンパイラーがコンストラクターを作成し、変数をデフォルト値に初期化します。 例 1 に示すように、このデフォルトのコンストラクターをオーバーライドして、変数を希望の値に初期化することを選択できます。

しかし、Demo(int a)のようなパラメータ化されたコンストラクタを指定し、デフォルトコンストラクタを使用したい場合 Java Demo() では、必ず指定する必要があります。

言い換えれば、オーバーロードコンストラクタが Java オーバーライドされており、デフォルトのコンストラクタを使用したい場合 Java、それを指定する必要があります。

ステップ5) 行番号 4 ~ 8 のコメントを解除します。 コードを保存、コンパイル、実行します。

なぜコンストラクタオーバーロードが必要なのか Java?

コンストラクタのオーバーロード Java クラス内に複数のコンストラクタを許可し、それぞれが異なるパラメータ リストを持つようにします。これにより柔軟性が高まり、コード効率が向上します。

  • オブジェクト作成の柔軟性: コンストラクターのオーバーロードを使用すると、パラメーターの数やタイプに応じて、さまざまな方法でオブジェクトを初期化できます。
  • コードの再利用性: this() キーワードを使用して、あるコンストラクターを別のコンストラクターから呼び出すことで、コンストラクター ロジックを再利用できます。
  • 読みやすさの向上: オーバーロードされたコンストラクターは、さまざまな初期化のニーズに合わせて特定のコンストラクター オプションを提供することで、コードをより直感的にするのに役立ちます。
  • デフォルトおよびカスタム初期化: コンストラクターのオーバーロードを使用すると、デフォルトのオブジェクトとカスタム初期化されたオブジェクトの両方を簡単に作成できます。

よくある質問

コンストラクタ は、新しく作成されたオブジェクトを初期化するために使用される特別なメソッドで、オブジェクトにメモリが割り当てられた直後に呼び出されます。 これを使用して、オブジェクトの作成時にオブジェクトを目的の値またはデフォルト値に初期化できます。 コード作成者がクラスのコンストラクターを作成することは必須ではありません。

クラスにユーザー定義のコンストラクターが提供されていない場合、コンパイラーはメンバー変数をデフォルト値に初期化します。

  • 数値データ型は 0 に設定されます
  • char データ型は null 文字 ('\0') に設定されます
  • 参照変数は null に設定されます

  1. それは 同名 クラスとして
  2. 偶数でない値を返してはなりません ボイド

: 最初のコンストラクタを作成する 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

基本クラスが子によって拡張されるシナリオを考えてみましょう。 子クラスのオブジェクトが作成されるたびに、最初に親クラスのコンストラクターが呼び出されます。 これはと呼ばれます コンストラクターの連鎖。

例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();
--or--
super(parameter list);

例: コンストラクターが次のような場合 デモ(文字列名,int a)、指定します 素晴らしい("Java」、5)。 使用する場合、キーワード super はコードの最初の行である必要があります 子クラスのコンストラクター内。

ステップ4) 行番号 26 のコメントを解除してコードを実行します。 出力を観察します。

出力:

Inside 2nd Parent Constructor
Inside the Constructor of Child
Value1 === 5
Value2 === 0
Value1 === 3
Value2 === 4