Les constructeurs sont plus proches des méthodes statiques que des méthodes "normales". Comme les méthodes statiques, ils peuvent être surchargés, mais pas surchargé. Autrement dit, ils ne sont pas hérités mais peuvent être redéfinis.
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
Constructors et méthodes statiques sont dynamiquement jamais distribué (virtuellement) - Vous savez toujours le type de béton instanciation ou la classe concrète de la méthode statique.C'est pourquoi il n'a aucun sens d'avoir constructeur abstrait et méthode statique abstraite. C'est pourquoi vous ne pouvez pas non plus spécifier constructeur et méthode statique dans interfaces.
Vous pouvez même penser constructeur comme méthode usine statique (voir la corresponding pattern):
MyClass obj = new MyClass(); // the way it is
MyClass obj = MyClass.new(); // think of it like this
Le seul cas que je vois où il serait logique de définir constructeur abstrait ou méthode statique abstraite serait si la réflexion est utilisée. Dans ce cas, vous pouvez vous assurer que toute sous-classe redéfinira la méthode ou le constructeur statique correspondant. Mais la réflexion est un autre sujet ...
Note: dans les langages tels que Smalltalk où les classes sont des objets normaux, vous pouvez remplacer la méthode statique et avoir un constructeur abstrait. Mais cela ne s'applique pas à Java car les classes ne sont pas des objets "réguliers" même si vous pouvez les obtenir avec la réflexion.
Il semble que le constructeur soit un détail de mise en œuvre, et donc forcer la construction de sous-classes d'une certaine manière serait une mauvaise chose. Si vous voulez une construction encapsulée, utilisez le modèle d'usine statique. –
On dirait qu'il veut quelque chose qui n'est pas possible avec les génériques actuels, le constructeur de sous-typage/prise de paramètres structurels. – Dykam
Qu'est-ce que vous essayez d'accomplir? Peut-être y a-t-il une autre façon de voir les choses. – fre0n