Beide anderen Antworten sind korrekt (kein Konstruktor oder privater Konstruktor), aber es gibt noch ein paar weitere Details, die Sie interessieren könnten:
- Hier ist an example von keinem Konstruktor. Bemerkenswert ist, dass
A
einfach keinen Konstruktor hat und B
einfach super()
nicht aufruft. Ansonsten funktioniert alles anders als erwartet.
- Hier ist an example eines privaten Konstruktors. Sie können immer noch keine
new A()
instanziieren, aber Sie müssen immer noch super()
von B
Konstruktor aufrufen.
Technicalities:
- Verwendung einiger Funktionen (wie ein Standardwert auf einer Membervariable) wird
A
verursacht einen impliziten Konstruktor zu bekommen, automatisch. Mach dir keine Sorgen, dies hat keinen Einfluss auf die Konstruierbarkeit oder ob Sie super()
anrufen müssen. Aber wissen Sie, dass es da ist, und falls notwendig, wird ein impliziter super()
Aufruf dem B
Konstruktor vorangestellt. Sehen Sie sich die JS-Ausgabe an, um dies zu überprüfen.
- In jedem Fall, wissen Sie, dass Sie noch eine
A
zur Laufzeit mit var a = Type.createInstance(A,[]);
instanziieren können, da die Überprüfung der Kompilierungszeit nicht RTTI begrenzen.
Verwandte Diskussion:
Abgesehen von privat/kein Konstruktor hat Haxe keinen formalen Begriff der abstrakter Klassen hat (Basisklassen nicht instanziiert werden erwartet) oder abstrakte Methoden (Funktionen auf abstrakte Basisklassen ohne Implementierung, die muss durch eine abgeleitete Klasse implementiert werden.) Allerdings , Andy Li schrieb a macro für die Durchsetzung einiger dieser Konzepte, wenn Sie sie verwenden. Ein solches Makro kann Verstöße gegen diese Regeln erkennen und Kompilierungsfehler auslösen.
1. Nicht ein ganz anderes Thema mit Haxe abstracts types, bei denen es verwechselt werden.
2. Nicht, mit virtuellen Funktionen zu verwechseln, die wikipedia describes als eine Funktion, die kann außer Kraft gesetzt werden (obwohl verschiedene Dokumente für verschiedene Sprachen beschreiben diese hochbelasteter Begriff unterschiedlich.)