Impliziter Superkonstruktorfehler im Standard-Java-Konstruktor
In Java werden vom Compiler automatisch Standardkonstruktoren für Klassen bereitgestellt, die nicht explizit definiert sind irgendwelche Konstrukteure. Wenn eine Basisklasse jedoch einen Konstruktor definiert, generiert der Compiler nicht mehr implizit einen Standardkonstruktor für seine Unterklassen. Dies kann zu dem Fehler „Der implizite Superkonstruktor ist für den Standardkonstruktor nicht definiert“ führen.
Beispiel:
Bedenken Sie diesen Code:
abstract public class BaseClass { String someString; public BaseClass(String someString) { this.someString = someString; } abstract public String getName(); } public class ACSubClass extends BaseClass { public ASubClass() { // default constructor // super(someString); // error: super() must be invoked in subclasses } public String getName() { return "name value for ASubClass"; } }
Hier verfügt ACSubClass über keinen expliziten Konstruktor. Stattdessen basiert es auf dem vom Compiler bereitgestellten Standardkonstruktor. Da BaseClass jedoch einen Konstruktor definiert, gibt es für BaseClass keinen Standardkonstruktor. Dies führt zum Compilerfehler, der besagt, dass in der Unterklasse ein expliziter Konstruktor definiert werden muss.
Lösung:
Um diesen Fehler zu beheben, muss man einen expliziten Konstruktor bereitstellen in der Unterklasse, die den Superkonstruktor mithilfe von Super(Parametern) aufruft. Alternativ kann die Basisklasse geändert werden, um einen Standardkonstruktor bereitzustellen.
// Option 1: Provide an explicit constructor in the subclass public class ACSubClass extends BaseClass { public ASubClass(String someString) { super(someString); } public String getName() { return "name value for ASubClass"; } } // Option 2: Modify the base class to have a default constructor abstract public class BaseClass { String someString; public BaseClass() {} // added default constructor public BaseClass(String someString) { this.someString = someString; } abstract public String getName(); }
Das obige ist der detaillierte Inhalt vonWarum erhält eine Java-Unterklasse den Fehler „Impliziter Superkonstruktor ist undefiniert' und wie kann er behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!