« Programmation Java/Transtypage » : différence entre les versions

Contenu supprimé Contenu ajouté
Merrheim (discussion | contributions)
Aucun résumé des modifications
Conversion
Ligne 3 :
Le '''transtypage''' (ou ''cast'') est la conversion d'un objet d'une classe en une autre classe.
 
===Transtypage et type de baseexplicite===
La syntaxe du changement de type est la suivante :
(''nouveau_type'')''terme''
Où <tt>''terme''</tt> est le terme de l'expression à convertir.
Si ce terme est une expression, il faut l'encadrer par des parenthèses.
 
Exemple :
long a=1000L;
int b=(int)(a*3L)+2; // multiplie '''a''' par 3,
// convertit en int, et ajoute 2
 
Les types de base entiers, reéls et caractères peuvent être convertit dans un autre type de ce groupe (entiers, réels, caractères).
Un booléen ne peut être convertit.
 
Un objet ne peut être convertit en une autre classe, que si sa classe réelle (celle du constructeur utilisé) est compatible avec la nouvelle classe ou interface, c'est à dire :
*La nouvelle classe est une classe parente (directe/indirecte) de celle de l'objet,
*Ou l'interface est implémentée par la classe de l'objet.
 
Exemple 1 :
class A { ''...'' } // extends Object implicite
class B extends A { ''...'' }
''...''
B objB = new B();
A objA = (A)objB; // la classe A est parente de la classe B
 
Exemple 2 :
class A { ''...'' } // extends Object implicite
class B extends A { ''...'' }
''...''
Object obj = new B();
// ^^ la classe réelle de obj est B,
// conversion en Object implicite
A objA = (A)obj; // la classe A est parente de la classe B
 
===Transtypage implicite===
Pour les types de base, les conversions implicites sont les suivantes :
*Toute expression ou constante utilisant un type entier, excepté <tt>long</tt>, est implicitement convertit en <tt>int</tt>,<br/>Exemples :
short s;
s = 15; // <-- erreur générée, 15 est de type int
s = (short)15;
s = s + s ; // <-- erreur générée, expression convertit en int
s = (short)(s + s);
*Si l'expression contient un terme de type <tt>long</tt>, alors le résultat sera de type <tt>long</tt>.<br/>Exemples :
long a = 1 + 2L;
long b = 3 + a;
 
Pour les objets, la conversion en une classe parente peut être implicite.
===Transtypage explicite===
Exemple :
Object obj = new A();