OVH Cloud OVH Cloud

Signature sur constructeur dérivant d'une classe abstraite.

4 réponses
Avatar
chico
Bonjour,

Excusez lka trivialité de ma question mais je me demande si l'on peut
forcer les classe dérivées d'une autre (absctraite ici en l'occurence
ou implementant une interface) à avoir au moins une signature donnée
pour au moins un de ses constructeur.

Pour etre clair :

je voudrai forcer toutes les classe dérivant ma classe A a avoir au
moins un constructeur prenant comme parametre un objet de type B

Je ne sais pas si cela peut se faire.

Merci pour vos info.

4 réponses

Avatar
Nino
non, mais regarde le design de la fabrique et la fabrique abstraite.
C'est un meilleur moyen pour arriver à ce que tu veux et certainement plus
proprement.


"cyril" a écrit dans le message de news:

| Bonjour,
|
| Excusez lka trivialité de ma question mais je me demande si l'on peut
| forcer les classe dérivées d'une autre (absctraite ici en l'occurence
| ou implementant une interface) à avoir au moins une signature donnée
| pour au moins un de ses constructeur.
|
| Pour etre clair :
|
| je voudrai forcer toutes les classe dérivant ma classe A a avoir au
| moins un constructeur prenant comme parametre un objet de type B
|
| Je ne sais pas si cela peut se faire.
|
| Merci pour vos info.
Avatar
Nicolas Delsaux
Le 19.01 2004, cyril s'est levé et s'est dit : "tiens, si j'écrivais aux
mecs de fr.comp.lang.java ?"

Bonjour,

je voudrai forcer toutes les classe dérivant ma classe A a avoir au
moins un constructeur prenant comme parametre un objet de type B


C'est très curieux, comme question. Quel est l'objectif réel de cette
magouille ?

Je ne sais pas si cela peut se faire.

Merci pour vos info.



--
Nicolas Delsaux
ZT> Tout nous vient de Crôm, le crédit comme le débit. Enfin, c'est ce
ZT> que je me tue à expliquer à mon banquier, qui est un homme de peu
ZT> de foi à la tête fort dure.
ZT in frjn - Si tu crois pas à Crôm, prends un gnon

Avatar
Armel HERVE
In article ,
says...
Le 19.01 2004, cyril s'est levé et s'est dit : "tiens, si j'écrivais aux
mecs de fr.comp.lang.java ?"

Bonjour,

je voudrai forcer toutes les classe dérivant ma classe A a avoir au
moins un constructeur prenant comme parametre un objet de type B


C'est très curieux, comme question. Quel est l'objectif réel de cette
magouille ?

Je ne sais pas si cela peut se faire.

Merci pour vos info.




Je ne sais pas ce que tu veux en faire, mais si tous les constructeurs

de ta classe absctraite prennent un paramètre de type B, alors il faudra
bien que tes classes dérivées lui en fournissent un.

Je ne sais pas si ca répond à ta question, mais je ne vois pas comment
tu pourrais imposer les paremètres des constructeurs des classes
dérivées.

Armel


Avatar
vclassine
(cyril) wrote in message news:...
Bonjour,

Excusez lka trivialité de ma question mais je me demande si l'on peut
forcer les classe dérivées d'une autre (absctraite ici en l'occurence
ou implementant une interface) à avoir au moins une signature donnée
pour au moins un de ses constructeur.

Pour etre clair :

je voudrai forcer toutes les classe dérivant ma classe A a avoir au
moins un constructeur prenant comme parametre un objet de type B

Je ne sais pas si cela peut se faire.

Merci pour vos info.


Une partie de la réponse:

Déclarer <private> le constructeur par défaut (celui qui n'a pas de
paramètre) de ta classe mère pour le masquer. Ainsi toute classe fille
devra appeler un de tes constructeurs explicites (en l'occurence avec
un objet de type B en argument). Ceci étant dit ça n'oblige a rien
pour la signature du constructeur de la classe fille.

Personnelement je ne pense pas que ça soit possible (peut-être, même
pas sûr, avec des contôles à base de réfléxion pendant l'éxécution,
mais c'est particulièrement dégueulasse...). En tout cas ça n'est
probablement pas la meilleur manière de répondre à ton besoin
fonctionnel (pas syntaxique), comme Nino je dirais que ça sens le
besoin de Fabrique Abstraite...

Bref expliques pourquoi tu en as besoin, on t'expliquera comment t'en
passer ;-)

Exemple de masquage du constructeur par défaut et :

abstract class ClasseA
{
private ClasseA()
{
//optionnel
throw UnsupportedException("Je me suis gourré je voulais pas
l'appeler même en interne");
}

public ClasseA(TypeB b)
{
...
}

//ne pas déclarer d'autre constructeur visible par les enfants de
la classe.

}

class ClasseFilleDeA extends ClasseA
{
//ça passe pas à la compil
//public ClasseB()
//{
// super(); //ça pète ici
//}

//ça c'est nickel :-)
public ClasseB(TypeB b)
{
super(b);
}

//c'est là où ça fait mal :-(
public ClasseB()
{
super(new TypeB());
}

}