Heim > Java > javaLernprogramm > Java-Vererbung, ob die Unterklasse den Konstruktor der übergeordneten Klasse erbt

Java-Vererbung, ob die Unterklasse den Konstruktor der übergeordneten Klasse erbt

PHP中文网
Freigeben: 2017-06-22 10:27:45
Original
1794 Leute haben es durchsucht

Bei der Vererbung in Java, 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);
    }

}
Nach dem Login kopieren

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

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

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

Die Ausführungsstruktur ist:
2 1234

Zusammenfassung:

  • 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

  1. Wenn in der übergeordneten Klasse kein Konstruktor vorhanden ist, Das System verfügt standardmäßig über einen parameterlosen Konstruktor

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!

Verwandte Etiketten:
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