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

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-31 02:50:021013Durchsuche

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

Müssen Sie den Superklassenkonstruktor 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: Der Compiler ruft automatisch den zugänglichen Konstruktor ohne Argumente (Konstruktor ohne Argumente) in der Oberklasse auf. Dieses Standardverhalten wird als Konstruktorverkettung bezeichnet.

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 öffentliche Konstruktor ohne Argumente, der vom Compiler hinzugefügt wird, wenn es keinen expliziten Konstruktor in der Klasse gibt.

Wann ist super( ) Erforderlich?

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

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

Beispiel 1:

<code class="java">public class Base {}
public class Derived extends Base {}</code>

Nein Ein expliziter Aufruf von super() ist erforderlich, da Base über einen Standardkonstruktor verfügt.

Beispiel 2:

<code class="java">public class Base {
    public Base(int i) {}
}
public class Derived extends Base {
    public Derived(int i) {
        super(i); // Explicitly call the Base(int) constructor
    }
}</code>

In diesem Fall ist super(i) erforderlich, weil Die Superklasse verfügt nicht über einen Konstruktor ohne Argumente, und der Konstruktor der Unterklasse muss einen Anfangswert für seinen i-Parameter bereitstellen.

Durch das Verständnis dieser Konzepte können Sie unnötige super()-Aufrufe vermeiden und eine ordnungsgemäße Konstruktorverkettung sicherstellen in Ihren Unterklassen.

Das obige ist der detaillierte Inhalt vonMüssen Java-Unterklassen den Superklassenkonstruktor immer explizit aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn