Supposons qu'il existe une classe avec tous ses constructeurs déclarés comme privés.
EG.: P>
public class That extends This { That () {..} ... }
3 Réponses :
de ce que je connais l'utilisation générale d'un constructeur code> code> est pour vous assurer que la construction d'objets est effectuée via certains autres moyens, c'est-à-dire une méthode statique. Par exemple:
public class Something { private Something() { } public static Something createSomething() { Something ret = new Something(); // configure ret in some specific way return ret; } }
Oui, c'est plus ou moins ce que Singleton fait - avec l'ajout d'un drapeau, qu'il soit déjà instancié lui-même. S'il y avait un moyen de se déplacer, je pourrais apporter des appels explicites à certaines des méthodes non statiques de Java.Lang.Runtime. mais bien d'être vrai.
..et, les messages Eclipse sont trompeurs. Comme je l'ai mentionné dans mon Q.
Suivi. Sur les msgs Eclipse, le compilateur ne tient probablement pas compte du fait que vous marquez tous les constructeurs comme privés - il s'agit simplement de dire que celui que vous essayez d'invoquer ne fonctionnera pas (ainsi "invoquer un autre"). En outre, dans l'ensemble, je ne reçois toujours pas quel problème vous essayez de résoudre. Plusieurs messages ici ont clairement répondu à la différence entre une classe finale et des constructeurs privés, mais je ne sais pas que vous avez articulé la question de haut niveau (modèle de conception) que vous essayez de résoudre (pourrait faire l'objet d'un poste différent ).
Vous déclarez une classe En d'autres termes, en utilisant Notez que déclarer des constructeurs Lorsque vous faites tous les constructeurs de la classe finale code> contre son constructeur
privé code> pour différentes raisons: p>
finale code> pour indiquer que la classe n'est pas conçue pour l'héritage. Li>
privé code> pour donner le contrôle de la classe sur son instanciation. Li>
ul>
final code> contrôle héritage, lors de l'utilisation d'une instanciation de contrôle code> Constructeurs privé p>
privé code> désactive l'héritage uniquement de l'extérieur. À l'intérieur de la classe, vous pouvez toujours le hériter avec une classe dérivée nommée ou anonyme. P>
privé code>, vous avez besoin d'une méthode code> statique > publique pour rendre la classe utilisable. Un type commun de méthode code> statique code> est la méthode d'usine: vous pouvez laisser les utilisateurs de votre classe à appeler des constructeurs privés indirectement via une méthode statique publique. P>
Une classe avec des constructeurs privés ne peut être instanciée à l'exception du formulaire à l'intérieur de la même classe. Cela rend inutile (possible, mais ne compilera pas) de l'étendre de la classe Antoher. P>
Cela ne signifie pas qu'il ne peut pas être sous-classé du tout, par exemple parmi les classes intérieures, vous pouvez étendre et appeler le constructeur privé. P>
Bon point, mais la dernière déclaration était un peu trouble. Vous pouvez sous-classer la classe, mais ne pas appeler le constructeur privé de la sous-classe. C'est privé, non protégé. Mais oui. Si vous avez une classe intérieure à l'intérieur de la classe d'origine avec constructeur privé, vous pouvez appeler le constructeur privé de la classe d'origine. Je ne sais pas ce que c'est pour, mais c'est légal.
La hiérarchie est, plus ou moins, paquet -> classe -> classes intérieures. Ce qui est privé pour la classe, est accessible aux classes intérieures. Vous pouvez déclarer une classe interne abstraite avec constructeur privé et quelques sous-classes intérieures et utilisez-les à l'intérieur de la classe principale. Ce n'est pas la chose la plus utile au monde, mais si vous avez envie de le faire, vous le pouvez.