Heim >Java >javaLernprogramm >Java-Vererbung, ob die Unterklasse den Konstruktor der übergeordneten Klasse erbt
Bei der Vererbung in Java erbt die Unterklasse nicht den Konstruktor der übergeordneten Klasse, aber sie muss call (Implizit oder explizit)
Sehen wir uns das Beispiel an:
public class TestExtends { public static void main(String[] args) { SonClass s = new SonClass(66); } } class FooClass{ public FooClass() { System.out.println(100); } public FooClass(int count) { System.out.println(count); } } class SonClass extends FooClass{ public SonClass() { } public SonClass(int c) { System.out.println(1234); } }
Laufendes Ergebnis:
100
1234
Analysieren Sie als Nächstes, warum ein solches Ergebnis erzeugt wird:
Wenn das Programm die Zeile SonClass s = new SonClass(66);
ausführt, ruft es
public SonClass(int c) { System.out.println(1234); //在执行这行时系统会优先调用父类的无参构造函数super(); }
auf, wenn die Unterklasse ausgeführt wird Die obige Konstruktormethode entspricht der Ausführung des folgenden Codes:
public SonClass(int c) { super(); // 必须在第一行调用,否则不能编译 System.out.println(1234); //在执行这行时系统会优先调用父类的无参构造函数super(); }
Das Ergebnis ist also:100 1234
Als nächstes wird ein weiterer Fall (expliziter Aufruf) eingeführt . Wenn die Unterklasse Der Konstruktor ist wie folgt geschrieben:
public SonClass(int c) { super(2); // 必须写在第一行,否则不能编译,显式调用父类构造函数后,系统就不在默认调用无参构造函数了 System.out.println(1234); }
Die Ausführungsstruktur ist: 2 1234
Konstruktoren können nicht vererbt werden und werden nur zum Aufruf in Unterklassen verwendet (wenn die übergeordnete Klasse keinen parameterlosen Konstruktor hat, muss dieser beim Erstellen einer Unterklasse explizit in der ersten Zeile von aufgerufen werden (der Codekörper des Unterklassenkonstruktors) Die übergeordnete Klasse verfügt über einen parametrisierten Konstruktor, andernfalls kann sie nicht kompiliert werden.
Wenn die übergeordnete Klasse keinen parametrisierten Konstruktor hat, ist dies nicht erforderlich Rufen Sie beim Erstellen einer Unterklasse explizit den Konstruktor der übergeordneten Klasse auf. Das System ruft standardmäßig den Konstruktor ohne Parameter der übergeordneten Klasse auf Das System kann den standardmäßigen Konstruktor ohne Parameter nicht aufrufen. Wenn der Aufruf zum Kompilieren nicht angezeigt wird, wird er daher nicht übergeben.
super()
- Zusätzliche Erklärung
:
In Java verfügt das System nach dem Erstellen eines parametrisierten Konstruktors nicht mehr über einen standardmäßigen Konstruktor ohne Parameter
Das obige ist der detaillierte Inhalt vonJava-Vererbung, ob die Unterklasse den Konstruktor der übergeordneten Klasse erbt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!