Aufruf eines anderen Konstruktors in Java

Rupam Yadav 12 Oktober 2023
  1. Aufruf eines Konstruktors von einem anderen Konstruktor innerhalb der gleichen Klasse in Java
  2. Aufrufen eines Konstruktors von einem anderen aus der Basisklasse in Java
Aufruf eines anderen Konstruktors in Java

In Java wird die Reihenfolge des Aufrufs von Konstruktoren bei der Initialisierung des Objekts als Konstruktorverkettung bezeichnet. Sie wird verwendet, wenn wir einen Konstruktor nach dem anderen unter Verwendung einer Instanz aufrufen wollen.

Aufruf eines Konstruktors von einem anderen Konstruktor innerhalb der gleichen Klasse in Java

Wenn wir einen Konstruktor von einem anderen Konstruktor innerhalb derselben Klasse aufrufen wollen, verwenden wir das Schlüsselwort this. Ein Ausdruck, der das Schlüsselwort this verwendet, muss die erste Zeile des Konstruktors sein. Die Reihenfolge spielt bei der Konstruktorverkettung keine Rolle. Es muss mindestens einen Konstruktor geben, der nicht das Schlüsselwort this verwendet.

Im folgenden Beispiel haben wir eine Klasse Test, die 3 Konstruktoren hat. Einer ist der Standardkonstruktor ohne Parameter, während die anderen beiden parametrisiert sind. In der Methode main instanziieren wir das Objekt der Klasse mit dem Schlüsselwort new, ohne irgendwelche Parameter zu übergeben.

Es wird der Standardkonstruktor Test() aufgerufen, der den Aufruf an den parametrisierten Konstruktor Test(String name) mit this("Steve") umleitet. Der Konstruktor Test(String name) leitet den Aufruf an den anderen parametrisierten Konstruktor Test(int age, String place) mit this(30, "Texas") weiter.

Die Anweisungen innerhalb des Test(int age, String place) werden zuerst ausgeführt. Danach wird der Rest der Anweisungen des Konstruktors Test(String name) ausgeführt. Schließlich wird die verbleibende Anweisung des Standardkonstruktors ausgeführt und das Objekt erfolgreich initialisiert.

public class Test {
  Test() {
    this("Steve");
    System.out.println("Default Constructor");
  }
  Test(String name) {
    this(30, "Texas");
    System.out.println("Name - " + name);
  }
  Test(int age, String place) {
    System.out.println("Age- " + age + ", place- " + place);
  }
  public static void main(String[] args) {
    Test test = new Test();
  }
}

Ausgabe

Age- 30, place- Texas
Name - Steve
Default Constructor

Aufrufen eines Konstruktors von einem anderen aus der Basisklasse in Java

Wenn es mehr als eine Klasse mit der Vererbungsbeziehung gibt, müssen wir das Schlüsselwort super verwenden, um den Konstruktor der Elternklasse von der Kindklasse aus aufzurufen. Im Gegensatz zum Schlüsselwort this setzt die JVM das Schlüsselwort super automatisch.

Die Basisklasse ist die Elternklasse, die durch die abgeleitete Klasse erweitert wird. Die Hauptmethode, in der wir das Klassenobjekt instanziieren, ruft den Standardkonstruktor derselben Klasse auf, der den Aufruf mit this("Adam") weiter an den parametrisierten Konstruktor der Kindklasse umleitet.

super(name) ruft den parametrisierten Konstruktor Base(String name) der Klasse Base auf. Der Standardkonstruktor der Klasse Base wird mit this() aufgerufen. Auch hier wird die Klassenvariable mit this.name = name initialisiert.

Der Code innerhalb des Standardkonstruktors der Klasse Base wird ausgeführt. Danach werden die Anweisungen innerhalb des parametrisierten Konstruktors Base(String name) ausgeführt. Schließlich wird die verbleibende Anweisung innerhalb des parametrisierten Konstruktors der Klasse Derived ausgeführt.

class Base {
  String name;
  Base() {
    System.out.println("Default Constructor Base Class");
  }
  Base(String name) {
    this();
    this.name = name;
    System.out.println("Parameterized Constructor Base Class called:- " + name);
  }
}
class Derived extends Base {
  Derived() {
    this("Adam");
  }
  Derived(String name) {
    super(name);
    System.out.println("Parameterized Constructor Derived Class called: " + name);
  }
  public static void main(String[] args) {
    Derived derived = new Derived();
  }
}

Ausgabe

Default Constructor Base Class
Parameterized Constructor Base Class called:- Adam
Parameterized Constructor Derived Class called: Adam
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Verwandter Artikel - Java Constructor