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 : 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;
}
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 : 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;
}
L'objet retourné perd un certain nombre des propriétés qu'avait arg en entrée.

Comment faire du mieux possible?
Merci.