Ausführung von Java-Konstruktoren in der Vererbung

Mehvish Ashiq 15 Februar 2024
  1. Ausführung von Java-Konstruktoren in der Vererbung
  2. Ausführung des Standard-Java-Konstruktors in der Vererbung
  3. Ausführung des Java-Konstruktors in der Vererbung, wenn die übergeordnete Klasse einen standardmäßigen und parametrisierten Konstruktor hat
  4. Verwenden Sie super, um den parametrisierten Konstruktor der übergeordneten Klasse und aller untergeordneten Klassen aufzurufen
Ausführung von Java-Konstruktoren in der Vererbung

Heute lernen wir die Ausführung von Java-Konstruktoren bei der Vererbung kennen. Wir werden Codebeispiele der Standard- und parametrisierten Konstruktoren in den abgeleiteten Klassen sehen (auch als untergeordnete Klassen und Unterklassen bezeichnet).

Ausführung von Java-Konstruktoren in der Vererbung

Genug Wissen über Vererbung ist notwendig, um mit diesem Artikel fortzufahren. Wenn Sie dieses Tutorial lesen, gehen wir davon aus, dass Sie über solide Kenntnisse der Java-Vererbung verfügen.

Lassen Sie uns etwas über den Ausführungsprozess von Java-Konstruktoren lernen, während wir die übergeordnete Klasse (auch bekannt als Basisklasse oder Superklasse) mit dem Schlüsselwort extends erweitern.

Ausführung des Standard-Java-Konstruktors in der Vererbung

Beispielcode:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass();
  }
}

Ausgabe:

Default constructor of the parent class.
Default constructor of the child class.
Default constructor of the grand child class.

Hier haben wir eine Testklasse namens constructorsInInheritance, die das Objekt von grandChildClass erstellt.

Wir haben drei weitere Klassen namens parentClass, childClass, grandChildClass, wobei grandChildClass die childClass erbt und childClass die parentClass erweitert.

Dabei wird der Default-Konstruktor parentClass automatisch von einem Konstruktor childClass aufgerufen. Immer wenn wir die untergeordnete Klasse instanziieren, wird der Konstruktor der übergeordneten Klasse automatisch ausgeführt, gefolgt vom Konstruktor der untergeordneten Klasse.

Beachten Sie die oben angegebene Ausgabe. Wenn Sie immer noch verwirrt sind, sehen Sie sich die folgende visuelle Erklärung an.

Ausführung von Java-Konstruktoren in der Vererbung – visuelle Erklärung

Was ist, wenn wir ein Objekt der childClass in der main-Methode erstellen? Wie werden die Standardkonstruktoren jetzt ausgeführt?

Der Konstruktor der parentClass wird zuerst ausgeführt, und dann liefert der Konstruktor der childClass das folgende Ergebnis.

Ausgabe:

Default constructor of the parent class.
Default constructor of the child class.

Ausführung des Java-Konstruktors in der Vererbung, wenn die übergeordnete Klasse einen standardmäßigen und parametrisierten Konstruktor hat

Beispielcode:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
  parentClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the parent class");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass();
  }
}

Ausgabe:

Default constructor of the parent class.
Default constructor of the child class.
Default constructor of the grand child class.

Hier haben wir einen parametrisierten Konstruktor in der parentClass. Die Standardkonstruktoren werden jedoch immer noch aufgerufen, da wir den Standardkonstruktor grandChildClass() in der Methode main aufrufen und außerdem den Standardkonstruktor der übergeordneten Klasse aufrufen.

Lassen Sie uns auch die parametrisierten Konstruktoren in die childClass und die grandChildClass schreiben. Rufen Sie dann den parametrisierten Konstruktor der grandChildClass in der Funktion main auf.

Beobachten Sie, welche Konstruktoren aufgerufen werden, ob sie standardmäßig oder parametrisiert sind.

Beispielcode:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
  parentClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the parent class");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
  childClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the child class");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
  grandChildClass(String name) {
    System.out.println(
        "Hi " + name + "! It's a parameterized constructor of the grand child class");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass("Mehvish");
  }
}

Ausgabe:

Default constructor of the parent class.
Default constructor of the child class.
Hi Mehvish! It's a parameterized constructor of the grand child class

Der obige Code ruft nur den parametrisierten Konstruktor der grandChildClass auf. Wir verwenden super(), um den parametrisierten Konstruktor der parentClass, childClass und der grandChildClass aufzurufen.

Denken Sie daran, dass der Konstruktoraufruf der übergeordneten Klasse in der ersten Zeile des Konstruktors der untergeordneten Klasse stehen muss.

Verwenden Sie super, um den parametrisierten Konstruktor der übergeordneten Klasse und aller untergeordneten Klassen aufzurufen

Beispielcode:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
  parentClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the parent class");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
  childClass(String name) {
    super(name);
    System.out.println("Hi " + name + "! It's a parameterized constructor of the child class");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
  grandChildClass(String name) {
    super(name);
    System.out.println(
        "Hi " + name + "! It's a parameterized constructor of the grand child class");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass("Mehvish");
  }
}

Ausgabe:

Hi Mehvish! It's a parameterized constructor of the parent class
Hi Mehvish! It's a parameterized constructor of the child class
Hi Mehvish! It's a parameterized constructor of the grand child class

Wir haben das Schlüsselwort super verwendet, um den parametrisierten Konstruktor der übergeordneten Klasse aufzurufen. Sie bezieht sich auf die übergeordnete Klasse (Oberklasse oder Basisklasse).

Wir haben es verwendet, um auf den Konstruktor der übergeordneten Klasse zuzugreifen, und die Methoden der übergeordneten Klasse aufgerufen.

super ist sehr nützlich für Methoden mit den exakten Namen in Eltern- und Kindklassen.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - Java Inheritance