Konstruktoren sind näher an statischen Methoden als an "normalen" Methoden. Wie statische Methoden können sie überladen werden, aber nicht überschrieben. Das heißt, sie werden nicht vererbt, sondern können neu definiert werden.
public BaseClass
{
public BaseClass(String s) { ... }
public static void doIt (String s) { ... }
}
public SubClass extends BaseClass
{
public SubClass(String s) { ... }
public static void doIt (String s) { ... }
}
public SubClass2 extends BaseClass
{
}
new SubClass("hello");
SubClass.doIt("hello");
new SubClass2("hello"); // NOK
SubClass2.doIt("hello"); // NOK
Konstrukteurs und statische Methoden sind nie dynamisch (fast) geschickt - Sie wissen immer den konkreten Typ Sie oder die konkrete Klasse der statischen Methode instanziiert.Deshalb macht es keinen Sinn, abstrakten Konstruktor und abstrakte statische Methode zu haben. Aus diesem Grund können Sie in interfaces auch keinen Konstruktor und keine statische Methode angeben.
Sie auch von Konstruktor als statischer Factory-Methode denken können (und sehen die corresponding pattern):
MyClass obj = new MyClass(); // the way it is
MyClass obj = MyClass.new(); // think of it like this
Der einzige Fall, den ich sehe, wo es Sinn machen würde abstrakte Konstruktor oder abstrakte statische Methode zu definieren wäre Wenn Reflexion verwendet wird. In diesem Fall können Sie sicherstellen, dass alle Unterklassen die entsprechende statische Methode oder den entsprechenden Konstruktor neu definieren. Aber Reflexion ist ein anderes Thema ...
Hinweis: In Sprachen wie Smalltalk, wo Klassen regelmäßige Objekte sind, können Sie statische Methode überschreiben und abstrakten Konstruktor haben. Aber es gilt nicht für Java, da Klassen keine "normalen" Objekte sind, selbst wenn Sie sie mit Reflektion erhalten können.
Es scheint so, als ob der Konstruktor ein Implementierungsdetail ist und daher die Erzwingung, dass Unterklassen auf eine bestimmte Weise konstruiert werden, eine schlechte Sache wäre. Wenn Sie eine gekapselte Konstruktion wünschen, verwenden Sie das statische Fabrikmuster. –
Sieht so aus, als wolle er etwas, was mit dem aktuellen Generics-, Struktur-Subtyping-/Parameter-Taking-Konstruktor nicht möglich ist. – Dykam
Was möchten Sie erreichen? Vielleicht gibt es eine andere Sichtweise. – fre0n