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:
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
Bedenken Sie den folgenden Code:
<code class="java">public class Base { private Base() {} } public class Derived extends Base { public Derived(int i) { super(); // Call the default no-args constructor of Base } }</code>
In In diesem Beispiel ist der super()-Aufruf im abgeleiteten Konstruktor unerlässlich, da Base über einen privaten Konstruktor ohne Argumente verfügt.
Das obige ist der detaillierte Inhalt vonSollten Sie in Konstruktoren immer „super()“ verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!