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
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!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
--------------------------
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 :
L'objet retourné perd un certain nombre des propriétés qu'avait arg en entrée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Comment faire du mieux possible?
Merci.
Partager