„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Sollten Sie in Konstruktoren immer „super()“ verwenden?

Sollten Sie in Konstruktoren immer „super()“ verwenden?

Veröffentlicht am 25.11.2024
Durchsuche:959

Should You Always Use `super()` in Constructors?

Ist das Vorhandensein von super() in Konstruktoren optional?

In der objektorientierten Programmierung ist es üblich, Konstruktoren in abgeleiteten Klassen zu verwenden um Konstruktoren in ihren Superklassen aufzurufen. Einige Entwickler stellen jedoch die Notwendigkeit in Frage, super() innerhalb von Konstruktoren explizit anzugeben.

Automatischer Aufruf von super() durch den Compiler

Der Java-Compiler fügt automatisch einen Aufruf ein zugänglicher Konstruktor ohne Argumente der Oberklasse, wenn der Unterklassenkonstruktor keinen Oberklassenkonstruktor angibt. Das bedeutet, dass das Weglassen von super() in den meisten Fällen keinen Einfluss auf das Verhalten des Programms hat.

Ausnahmen von der Regel

Es gibt jedoch Situationen wobei ein expliziter Aufruf von super() erforderlich ist:

  • Wenn die Superklasse keine zugänglichen No-Argumente hat Konstruktor.
  • Wenn der Unterklassenkonstruktor Argumente hat und die Oberklasse einen Konstruktor hat, der Argumente akzeptiert.
  • Wenn der Unterklassenkonstruktor einen bestimmten Konstruktor in der Oberklasse aufrufen muss, der nicht die standardmäßigen No-Argumente ist Konstruktor.

Konstruktorverwendung in Gegenwart von Argumente

Wenn ein Unterklassenkonstruktor Argumente hat, liegt es in der Verantwortung des Unterklassenkonstruktors, entsprechende Argumente an den Oberklassenkonstruktor zu übergeben. Der Compiler ruft nicht automatisch einen Superklassenkonstruktor mit Argumenten auf, sofern nicht ausdrücklich angegeben.

Beispiel

Betrachten Sie den folgenden Code:

public class Base {
    private Base() {}
}

public class Derived extends Base {
    public Derived(int i) {
        super(); // Call the default no-args constructor of Base
    }
}

In diesem Beispiel ist der super()-Aufruf im abgeleiteten Konstruktor wichtig, da Base über einen privaten Konstruktor ohne Argumente verfügt.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3