Transtypage

Signaler
Messages postés
46
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
11 juillet 2007
-
kirua12
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
-
Bonsoir tout le monde ,

je suis debutant en java , et j'ai un ptit probleme de comprehension
par rapport au transtypage ascendant

par exemple: si on prend T comme super classe de T1 on a le droit de faire T T1 mais par contre , quand on fait T1 T c'est une erreur , là ,je suis d'accord .
mais je comrprends pas pourquoi on fait un transtypage de cette manire qui est : T1 i (T1) T c'est-à-dire on doit transtyper T en T1 et que pour moi ça revient la même chose que T1 T .

meci d'avance pour l'explication car ça m'embête un peu

mereci.

4 réponses

Messages postés
13
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
27 décembre 2007

Joey

Java Forever...
Salut!! t'as raison ca beugue un peu mais c tout simple!! T est une super classe de T1 donc T contient T1 et non T1 contient T! ca tu l'as compris et quand on fait T1 T ca veux dire que T1 va contenir T1 + ce qui est en dehors de T1 donc le reste de T! ca donne une erreur!! et donc quand on fait T1 (T1) T on choisi de remettre à T exclusivement la partie T1 et non le reste!! Note qu'en général ce ganre de transtypage est faisable aussi dans d'autre cas comme dans le ca d'héritage comme T1 et de T2 héritent de T quand on fait T1 = T2 ca marche pas car ils ont pas les memes champs car ans T1 il y a les champs et méthodes de T + les champs et méthodes de T2 qui ne font pas partie de T1 ce qui crée une erreur donc ce qu'il faut faire c T1 = ( T ) T2 et là il va prendre que les champs partagés de T!!

Désolé j'ai beaucoup trop aprofondi mais il vaut mieux savoir que non!! donc j'espere t'avoir aidé de toute facon tu peux me répondre si t'as besoin d'autre chose ou plus d'infos!! Bonne Chance
Messages postés
46
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
11 juillet 2007

bonjour et merci joey de m'avoir repondu,

en fait je comprends pas quand tu dis t1 = t ça veux dire que t1 va contenir t1 + ce qui en dehors de t1 c'est-à-dire t?

et pour l'heritage de T1 et T2 par rappport à T
quand tu fais T1= (T) T2 là on est dans le cas du transtypage descendant parce que on transtype T vers T2 , normalement on doit toujours transtyper depuis la classe derié vers la classe de base , si je comprends bien , car là c un ptit peu ambigu?
merci d'avance.
Messages postés
13
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
27 décembre 2007

Joey

Java Forever...

Ben voila pour ta premiere question :
T1 T ça veux dire que t1 va contenir t1 + tout ce qui est en plus dans T sans T1. parce que T1 est contenue dans T donc T a d'autres méthodes et variables et sous classes en dehors de T1 donc quand on fait T1 T on veut faire passer a T1 tout ce que contient T et puisque T ne contient pas les memes valeurs que T1 ( car T veut dire T1 + autres valeurs ) le transtypage ne peut pas se faire dans ce sens!!

Pour ta deuxième quesstion :
voila pour T1 (T) T2 c comme si on avait fait T T2 et puis T1 = T ce qu'on a fait c qu'on a pris les champs et méthodes de T2 qui nous viennent de T puis on les a refilés à T1 qui les accepte car T1 hérite de T de cette facon on fait l'affectation en fesant un pont avec T!!

tu peux me répondre si t'as besoin d'autre chose ou plus d'infos!! Bonne Chance
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
3
Salut,

ne pas oublier que dans l'héritage on a la relation à sens unique : "est un"
par ex : T est un véhicule et T1 est une voiture

T=T1 est correct car une voiture est un véhicule
MAIS
T1=T est incorrect car un véhicule n'est pas (forcément) une voiture. Il y a des camoins, motos ... donc le changement de type est interdit.

Le transtypage explicite dit au compilateur : "Je prends la responsabilité du changement de type".
T1= (T1) T indique que tu sais que les types ne sont pas forcément compatibles mais que tu prends la responsabilité de cette opération et que tu peux avoir un problème lors de l'exécution