„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 > Müssen Java-Unterklassen den Superklassenkonstruktor immer explizit aufrufen?

Müssen Java-Unterklassen den Superklassenkonstruktor immer explizit aufrufen?

Veröffentlicht am 09.11.2024
Durchsuche:310

Do Java Subclasses Always Need to Explicitly Call the Superclass Constructor?

Müssen Sie den Superklassen-Konstruktor in Java-Unterklassen explizit aufrufen?

Beim Definieren einer Unterklasse ist es üblich, Konstruktoren zu sehen, die explizit aufrufen Superklassenkonstruktor mit super(). Allerdings kann man sich fragen, ob dies notwendig ist.

Wird super() automatisch vom Compiler hinzugefügt?

Ja, wenn der Unterklassenkonstruktor einen Aufruf der Oberklasse auslässt Konstruktor verwendet, ruft der Compiler automatisch den zugänglichen Konstruktor ohne Argumente (Konstruktor ohne Argumente) in der Oberklasse auf. Dieses Standardverhalten ist bekannt als Konstruktorverkettung.

Typen von Konstruktoren

  • Konstruktor ohne Argumente: Ein Konstruktor ohne Parameter.
  • Zugreifbarer Konstruktor ohne Argumente: Ein Konstruktor ohne Argumente in der Oberklasse, der für die Unterklasse sichtbar ist (öffentlich, geschützt oder paketprivat).
  • Standardkonstruktor: Der vom Compiler hinzugefügte öffentliche Konstruktor ohne Argumente wenn es keinen expliziten Konstruktor in der Klasse gibt.

Wann ist super() Erforderlich?

Die explizite Verwendung von super() ist nur erforderlich, wenn:

  • Die Oberklasse hat keinen zugänglichen Konstruktor ohne Argumente.
  • Die Unterklasse Der Konstruktor enthält Parameter. In diesem Fall muss er explizit einen Konstruktor in der Oberklasse aufrufen, der diese akzeptiert Parameter.

Beispiel 1:

public class Base {}
public class Derived extends Base {}

Es ist kein expliziter Aufruf von super() erforderlich, da Base einen Standardkonstruktor hat.

Beispiel 2:

public class Base {
    public Base(int i) {}
}
public class Derived extends Base {
    public Derived(int i) {
        super(i); // Explicitly call the Base(int) constructor
    }
}

In diesem Fall ist super(i) erforderlich, da die Oberklasse keinen Konstruktor ohne Argumente hat und der Unterklassenkonstruktor einen Anfangswert für seinen i-Parameter bereitstellen muss.

Wenn Sie diese Konzepte verstehen, können Sie unnötige super()-Aufrufe vermeiden und eine ordnungsgemäße Konstruktorverkettung in Ihren Unterklassen sicherstellen.

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