Bonjour,
est-il possible d'étendre une classe dont le constructeur est en private???
Bonjour,
est-il possible d'étendre une classe dont le constructeur est en private???
j'ai testé et je n'y arrive pas, c'est pour ça que je demande....
A première vu il n'y a rien qui t'en empêche. Montre nous ce que tu as écrit et indique nous quel message d'erreur tu as eu.
Si la classe n'a que des constructeurs privés, non, ce n'est pas possible de lui donner des classes filles.
Ce qui l'empêche est que le constructeur "fille" devra appeler un constructeur "maman", mais constructeur maman invisible puisqu'il est privé.
Bonjour,
J'ajoute qu'en général les compilateurs évolués t'invitent à mettre ta classe en final quand elle n'est pourvue que de constructeurs privés, exactement pour cette raison !
Bonjour,
Petite précision, si tu veux proscrire l'instanciation d'un type donné, mais ne pas figer pour autant ses responsabilités en permettant l'héritage. Alors il est tout à fait envisageable de passer par un constructeur protégé.
Le problème du protected est qu'il autorise les classes du package. Enfin bon en théorie les autres classes du package sont censé être développer par moi, mais je trouve dommage qu'il n'y est pas d'accesseur qui n'autorise qu'uniquement les classes filles. Mais bon je suppose que cela a été voulu pour avoir une hiérarchie dans les accesseurs... Ca aurait été difficile pour un tel accesseur de comparer sa "restrictivité" par rapport à l'accesseur par défaut...
D'ailleur me vient une question en passant (que je testerais si personne ne sait). Comment réagi java si dans deux jars différents on a deux classes ayant le même package? Parce que si il les considère comme étant vraiment dans le même package du coup mes restrictions ne servent plus à grand chose! Par exemple un développeur se servant de mon jar pourrait faire ce qu'il veut! (En même temps il aurait aussi pu dézipper mon jar et mettre ses classes dedans... mais au niveau du concept Objet je trouve ça étrange de pouvoir le faire)
Salut,
On peut effectivement placer deux classes dans le même package même si elles proviennent de deux JARs distincts. Heureusement, il est possible de pallier à cela à l'aide d'une petite déclaration dans le manifest de ton JAR :
http://java.sun.com/docs/books/tutor...r/sealman.html.
D'après le lien qui figure dans cette page ("JDC TechTips"), à partir du moment où une classe est chargée depuis un package scellé, tout autre classe du même package devra provenir du même JAR, sous peine de se voir refuser d'être chargée.
Hello
Dans java les constructeurs privées ne sont pas héritées.
En général un contructeur doit appeler un contrcuteur de la classe mère, soit explicitement (à l'aide de super(...)), soit implicitement (toute classe héritant de Object et qui déclare un constructeur XX, ce constructeur appelle le constructeur sans arguments de Object, indépendamment de la signature de XX.
dans le cas d'un constructeur privé au niveau de la classe mère, il n'est pas visibe pr la classe fille, du fait qu'il est privé, donc il ne sera pas appelé.
Merci de la précision Eric73!! Je n'étais pas au courant du tout de ça!
Précision supplémentaire : si tu ne déclares aucun constructeur dans une classe, le compilateur inclue automatiquement un constructeur par défaut sans argument qui se contente de faire appel à super(). Ceci n'est plus fait dès que tu déclares le moindre constructeur ; donc si le seul constructeur déclaré est privé, la classe devient non-héritable car aucun constructeur ne serait appelable.
Partager