Heim > Java > javaLernprogramm > Warum erhält eine Java-Unterklasse den Fehler „Impliziter Superkonstruktor ist undefiniert' und wie kann er behoben werden?

Warum erhält eine Java-Unterklasse den Fehler „Impliziter Superkonstruktor ist undefiniert' und wie kann er behoben werden?

DDD
Freigeben: 2024-11-29 14:34:11
Original
943 Leute haben es durchsucht

Why Does a Java Subclass Get an

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";
    }
}
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage