Heim > Java > javaLernprogramm > Warum erbt Java keine Konstruktoren?

Warum erbt Java keine Konstruktoren?

Mary-Kate Olsen
Freigeben: 2024-12-05 03:26:10
Original
929 Leute haben es durchsucht

Why Doesn't Java Inherit Constructors?

Vererbung von Java-Konstruktoren: Das Geheimnis lüften

In Java werden die Konstruktoren einer Klasse nicht von ihren Unterklassen geerbt. Diese Designwahl hat eine seit langem bestehende Frage aufgeworfen: Warum verfolgt Java diesen Ansatz?

Betrachten Sie die folgende Klasse:

public class Super {

  public Super(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    this.serviceA = serviceA;
    //etc
  } 

}
Nach dem Login kopieren

Wenn eine Unterklasse, Son, von Super erbt, verlangt Java, dass a Der Konstruktor muss in Son explizit mit Parametern deklariert werden, die mit denen in Super identisch sind. Dies kann zu sich wiederholendem Code führen, wie unten gezeigt:

public class Son extends Super{

  public Son(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    super(serviceA,serviceB,serviceC);
  }

}
Nach dem Login kopieren

Diese Wiederholung wirft die Frage auf: Warum verbietet Java die Vererbung von Konstruktoren?

Die Antwort liegt in den möglichen Konsequenzen davon Nachlass. Wenn Konstruktoren geerbt würden, würde jede Klasse schließlich einen Konstruktor von der Basisklasse Object erben. Das würde bedeuten, dass jede Klasse, unabhängig von ihrem Zweck, einen parameterlosen Konstruktor hätte.

Ein solcher Entwurf würde Mehrdeutigkeit schaffen. Beispielsweise würde der folgende Code:

FileInputStream stream = new FileInputStream();
Nach dem Login kopieren

die Frage offenlassen, welche Parameter an den Konstruktor übergeben werden sollen. Unterschiedliche Klassen erfordern möglicherweise unterschiedliche Parameter, was eine solche Vererbung höchst unpraktisch macht.

Obwohl es Szenarien gibt, in denen Pass-Through-Konstruktoren (Konstruktoren, die einfach den Superklassen-Konstruktor aufrufen) nützlich sind, hat sich Java klugerweise dafür entschieden, dies nicht zum Standardverhalten zu machen . Die unterschiedlichen Parameter, die für die Unterklassenkonstruktion erforderlich sind, erfordern die explizite Deklaration von Konstruktoren in jeder Klasse.

Das obige ist der detaillierte Inhalt vonWarum erbt Java keine Konstruktoren?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage