Problème de référence/cast (héritage)
Bonjour,
Note : la notion mère/fille était inversée dans ma description comme le fait remarquer justement Deaf
1) J'ai une classe mère ClasseM qui a un certain nombres d'arguments et une classe fille ClasseF qui ajoute certains champs en plus des champs de ClasseM dont elle dérive.
2) J'ai une fonction
Code:
1 2 3 4 5 6 7 8 9 10
| ClasseF ajouterInformation (ClasseF arg){
ClasseM m = (ClasseM)arg; //ici on croit qu'on cast mais pas du tout quand on regarde l'objet f qui reste de type ClasseF !
m = ajouterInformation(m); //ajouterInformation ne traite que des objets ClasseM
arg = (ClasseF)m; //c'est mal dans ce sens en théorie
//...
//Et ici on traite la partie spécifique aux champs de ClasseF
return arg;
} |
Ci-dessus, on a des cast qui ne devraient pas être faits comme ça...mais ça marche ClasseM --> ClasseF devrait générer une erreur mais comme le premier cast n'a fait que semblant de marcher, ça passe!
--------------------------
Pour faire plus propre, j'ai créé dans ma classe mère une fonction castToClasseM et un constructeur new ClasseF (ClasseM f)
Mais si je fais :
Code:
1 2 3 4 5 6 7 8 9 10
| ClasseF ajouterInformation (ClasseF arg){
ClasseM m = arg.castToClasseM(); //OK
m = ajouterInformation(m); //OK
ClasseF ret = new ClasseF (m); //on perd les références issus de arg à la sortie de la fonction puisque l'objet arg est détruit par le garbage collector
//...
//Et ici on traite la partie spécifique aux champs de ClasseF
return ret;
} |
L'objet retourné perd un certain nombre des propriétés qu'avait arg en entrée.
Comment faire du mieux possible?
Merci.