Konstruktorüberladung in Java

Was Konstruktor-Überladung in Java?

Java Konstruktorüberladung ist eine Technik, bei der eine Klasse eine beliebige Anzahl von Konstruktoren haben kann, die sich in der Parameterliste unterscheiden. Der Compiler unterscheidet diese Konstruktoren, indem er die Anzahl der Parameter in der Liste und ihren Typ berücksichtigt.

Beispiele für gültige Konstruktoren für die Klasse „Account“ sind

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

Beispiel 2: Um Konstruktor-Überladung zu verstehen in Java

Schritt 1) Geben Sie den Code in den Editor ein.

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();
 }
}

Schritt 2) Speichern, kompilieren und führen Sie den Code aus.

Schritt 3) Fehler = ?. Versuchen Sie, den Fehler zu beheben, bevor Sie mit dem nächsten Schritt fortfahren. Java Konstruktorüberladung

Schritt 4) Jede Klasse hat einen Standardwert Konstrukteur in Java. Standardmäßig überladener Konstruktor Java für Klasse Demo is Demo(). Falls Sie diesen Konstruktor nicht bereitstellen, erstellt der Compiler ihn für Sie und initialisiert die Variablen mit Standardwerten. Sie können diesen Standardkonstruktor überschreiben und Variablen mit Ihren gewünschten Werten initialisieren, wie in Beispiel 1 gezeigt.

Wenn Sie jedoch einen parametrisierten Konstruktor wie Demo(int a) angeben und den Standardkonstruktor verwenden möchten Java Demo(), Sie müssen es zwingend angeben.

Mit anderen Worten, falls Ihr überladener Konstruktor in Java überschrieben wird und Sie den Standardkonstruktor verwenden möchten Java, es muss angegeben werden.

Schritt 5) Kommentieren Sie Zeile Nr. 4-8 aus. Speichern, kompilieren und führen Sie den Code aus.

Warum brauchen wir Konstruktor-Überladung in Java?

Konstruktorüberladung in Java ermöglicht mehrere Konstruktoren in einer Klasse, von denen jeder unterschiedliche Parameterlisten hat. Dies erhöht die Flexibilität und verbessert die Codeeffizienz.

  • Flexibilität bei der Objekterstellung: Durch die Konstruktorüberladung können Sie Objekte je nach Anzahl oder Typ der Parameter auf verschiedene Weise initialisieren.
  • Code-Wiederverwendbarkeit: Sie können die Konstruktorlogik wiederverwenden, indem Sie mit dem Schlüsselwort this() einen Konstruktor von einem anderen aus aufrufen.
  • Verbesserte Lesbarkeit: Überladene Konstruktoren tragen dazu bei, den Code intuitiver zu gestalten, indem sie spezifische Konstruktoroptionen für unterschiedliche Initialisierungsanforderungen anbieten.
  • Standard- und benutzerdefinierte Initialisierung: Durch die Konstruktorüberladung können Sie problemlos sowohl standardmäßige als auch benutzerdefiniert initialisierte Objekte erstellen.

FAQs

Bauherr ist eine spezielle Methode, die zum Initialisieren eines neu erstellten Objekts verwendet wird und unmittelbar nach der Speicherzuweisung für das Objekt aufgerufen wird. Es kann verwendet werden, um die Objekte zum Zeitpunkt der Objekterstellung auf gewünschte Werte oder Standardwerte zu initialisieren. Es ist für den Programmierer nicht zwingend erforderlich, einen Konstruktor für eine Klasse zu schreiben.

Wenn für eine Klasse kein benutzerdefinierter Konstruktor bereitgestellt wird, initialisiert der Compiler die Mitgliedsvariablen auf ihre Standardwerte.

  • Numerische Datentypen werden auf 0 gesetzt
  • char-Datentypen werden auf Nullzeichen ('\0') gesetzt.
  • Referenzvariablen werden auf Null gesetzt

  1. Es hat die gleicher Name als die klasse
  2. Es sollte keinen Wert zurückgeben, nicht einmal ungültig

Beispiel 1: Erstellen Sie Ihren ersten Konstruktor in Java

Schritt 1) Geben Sie das folgende Konstruktorprogramm ein Java Herausgeber.

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();
  }
}

Schritt 2) Speichern, Ausführen und Kompilieren des Konstruktorprogramms in Java und beobachten Sie die Ausgabe.

Erwartete Ausgabe:

Inside Constructor
Value1 === 10
Value2 === 20

Stellen Sie sich ein Szenario vor, in dem eine Basisklasse um ein untergeordnetes Element erweitert wird. Immer wenn ein Objekt der untergeordneten Klasse erstellt wird, wird zuerst der Konstruktor der übergeordneten Klasse aufgerufen. Das nennt man Konstruktorkettung.

Beispiel 3: Um die Konstruktorverkettung zu verstehen

Schritt 1) Kopieren Sie den folgenden Code in den Editor.

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);
   }
}

Schritt 2) Führen Sie den Code aus. Aufgrund der Konstruktorverkettung wird beim Erstellen des Objekts der untergeordneten Klasse DemoChild zuerst der Konstruktor Demo() der übergeordneten Klasse aufgerufen und später der Konstruktor DemoChild() des untergeordneten Objekts erstellt.

Erwartete Ausgabe:

Inside 1st Parent Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value1 === 3
Value2 === 4

Schritt 3) Möglicherweise beobachten Sie, dass der Konstruktor der übergeordneten Klasse Demo überschrieben wird. Was ist, wenn Sie beim Erstellen Ihres untergeordneten Objekts den überschriebenen Konstruktor Demo(int a) anstelle des Standardkonstruktors Demo() aufrufen möchten?

In solchen Fällen können Sie das Schlüsselwort verwenden "Super" um überschriebene Konstruktoren der übergeordneten Klasse aufzurufen.

Syntax:-

super();
--or--
super(parameter list);

Ejemplo: Wenn Ihr Konstruktor so ist Demo(String Name,int a), Sie werden angeben super("Java”,5). Falls verwendet, das Schlüsselwort super muss die erste Codezeile sein im Konstruktor der untergeordneten Klasse.

Schritt 4) Kommentieren Sie Zeile Nr. 26 aus und führen Sie den Code aus. Beobachten Sie die Ausgabe.

Ausgang:

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