In diesem Beispiel habe ich eine Unterklasse mit einem leeren Konstruktor. In der Oberklasse sind zwei Konstruktoren vorgesehen. Wenn ich das main in dem Code unten ausführe, stellt es sich heraus, dass es "ich bin der Superkonstruktor ohne Parameter" druckt. Meine Frage ist, warum der Compiler den leeren Konstruktor in der Unterklasse ignoriert? Wenn ich diese "Ignoranz" akzeptieren kann, dann verstehe ich, dass der Compiler den Standardkonstruktor der Unterklasse ausführt, der in diesem Fall der in der Oberklasse ohne Parameter ist. Hier ist die Unterklasse:Warum wird der (Super-) Standardkonstruktor anstelle eines leeren Konstruktors aufgerufen?
package extendisevil;
public class SubConstructorInherit extends ConstructorInherit {
public SubConstructorInherit(String param) {
}
public static void main(String[] args) {
SubConstructorInherit obj = new SubConstructorInherit("valami");
}
}
Und hier ist der Super:
package extendisevil;
public class ConstructorInherit {
public ConstructorInherit(String name) {
System.out.println("I am the super constructor with String parameter: " + name);
}
public ConstructorInherit() {
System.out.println("I am the super constructor without parameter.");
}
}
Vielen Dank für Ihre Hilfe!
Ich bin hier pingelig, aber wir sollten den Begriff 'default constructor' in diesem Fall nicht verwenden, ein besserer Name ist' no-arg constructor'. Der Grund dafür, 'default constructor' ist der spezifische Name für die automatisch generierten no-arg Konstruktorklassen, die in Abwesenheit expliziter Konstruktoren erhalten werden. – biziclop
Sie haben Recht, bearbeitet es. – tkausl
Vielleicht kristallisiert die Verwendung von implizit versus explizit die Erklärung. – Grayson