Heim >Java >javaLernprogramm >Fehler beim impliziten Java-Superkonstruktor: Wie behebt man „Der implizite Superkonstruktor ... ist für den Standardkonstruktor nicht definiert'?

Fehler beim impliziten Java-Superkonstruktor: Wie behebt man „Der implizite Superkonstruktor ... ist für den Standardkonstruktor nicht definiert'?

DDD
DDDOriginal
2024-12-25 12:21:35694Durchsuche

Java Implicit Super Constructor Error: How to Fix

Java-Fehler: Impliziter Superkonstruktor für Standardkonstruktor nicht definiert

F: Standardkonstruktorfehler mit Unterklasse und abstrakter Basisklasse

Ein Java-Entwickler stößt auf einen Fehler mit der Meldung „Der implizite Superkonstruktor BaseClass() ist undefiniert für Standardkonstruktor. nach dem Entfernen redundanter Konstruktoren aus Unterklassen. Sie fragen sich, ob es möglich ist, die Konstruktoren zu entfernen und gleichzeitig das Vorlagenmethodenmuster einzuhalten.

A: Konstruktion und Standardkonstruktoren

Der Fehler entsteht, weil die Basisklasse ( BaseClass) deklariert einen Konstruktor (public BaseClass(String someString)) und deaktiviert den Standardkonstruktor (ohne Argumente). Beim Entfernen des Konstruktors aus der Unterklasse (ACSubClass) fügt der Compiler über den Standardkonstruktor einen impliziten Aufruf an den Konstruktor ohne Argumente der Basisklasse (super()) ein. Da BaseClass keinen Konstruktor ohne Argumente hat, ist dies illegal.

Mögliche Lösungen:

  1. Konstruktor aus BaseClass entfernen: Erlauben Sie, dass die Basisklasse nur den Standardkonstruktor hat, was für Unterklassen möglich ist erben.
  2. Konstruktor ohne Argumente in BaseClass deklarieren: Konstruktor ohne Argumente zur Basisklasse hinzufügen, entweder als einziger Konstruktor oder zusammen mit anderen Konstruktoren.

Diese Lösungen sind jedoch möglicherweise nicht realisierbar, wenn die Basisklasse Konstruktorargumente erfordert.

Bedenken Sie außerdem Umgestaltung des Designs:

  • Verwenden Sie eine Factory, um Unterklasseninstanzen zu erstellen: Erstellen Sie eine Factory-Klasse, die die Erstellung von Unterklassen mit den erforderlichen Argumenten übernimmt.
  • Übergeben Sie Argumente an die getName()-Methode: Entwerfen Sie die getName()-Methode so, dass Argumente zum Anpassen des zurückgegebenen Namens möglich sind Wert.

Das obige ist der detaillierte Inhalt vonFehler beim impliziten Java-Superkonstruktor: Wie behebt man „Der implizite Superkonstruktor ... ist für den Standardkonstruktor nicht definiert'?. 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