Aufruf eines anderen Konstruktors in Java
- Aufruf eines Konstruktors von einem anderen Konstruktor innerhalb der gleichen Klasse in Java
- Aufrufen eines Konstruktors von einem anderen aus der Basisklasse 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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn