IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

conversion des objets


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 50
    Points
    50
    Par défaut conversion des objets
    Bonsoir !

    Soient les instructions : int a = 2; short b = 25;

    L' instruction : a = b; veut dire que b est converti en int de façon implicite puis sa valeur est affectée à la variable a.

    Soient 2 classes : Base et Derive. ( Derive extends Base )

    L' instruction Base b = new Derive(); est possible. (Polymorphisme).

    Peut-on dire que l' objet new Derive() est converti en Base puis sa référence est mise dans la variable b ?

    Si la réponse est non, je souhaiterais une explication détaillée. Si c' est possible.

    Je vous remercie d' avance.

    PS : J' essaye de comprendre la nature profonde des objets.
    C'est à force de programmer qu'on devient un bon programmeur

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Peut-on dire que l' objet new Derive() est converti en Base puis sa référence est mise dans la variable b ?
    Non, il n'y a pas de conversion de la référence, puisque un Derive est un Base, contrairement au cas de type primitifs où la valeur est effectivement convertie (implicitement ou explicitement) de short vers int, car la représentation interne n'est pas la même.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par herve91 Voir le message
    Non, il n'y a pas de conversion de la référence, puisque un Derive est un Base, contrairement au cas de type primitifs où la valeur est effectivement convertie (implicitement ou explicitement) de short vers int, car la représentation interne n'est pas la même.
    Okay !

    Mais alors, en quoi consiste la conversion des objets ?
    C'est à force de programmer qu'on devient un bon programmeur

  4. #4
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    La conversion d'un objet ne change pas le type réel de l'objet mais le type effectif utilisé dans le programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Animal {
    }
    class Mammifere extends Animal {
    }
    class Humain extends Mammifere {
    }
     
    Animal h = new Humain();
    Animal m = new Mammifere();
    Animal a = new Animal();
    Les types réels de h, m, et a sont Humain, Mammifere, Animal, tous de type effectif Animal.
    Tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Humain hh = (Humain) h;
    Mammifere mm = (Mammifere) h;
    car h est un Humain, et donc aussi un Mammifere. Dans ce cas le type effectif est resp. Humain, Mammifere.
    Par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Humain hhh = (Humain) m;
    provoquera une exception ClassCastException car m est de type réel Mammifere, et un Mammifere n'est pas un Humain.
    Tu trouveras certainement beaucoup d'informations relatives aux conversions des objets par une recherche appropriée sur le net : mots-clés transtypage, conversion, casting, dowcasting, upcasting, etc.

  5. #5
    Membre régulier Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Points : 82
    Points
    82
    Par défaut
    Bien expliqué !
    ..::: aa du bocal ..:::
    Il nous faut deux ans pour apprendre à parler et toute une vie pour apprendre se taire.
    N'oublier surtout pas de ne pas poster la réponse même si on vous a pas aidé

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 50
    Points
    50
    Par défaut
    Après avoir réfléchi sur ces explications, dois-je en conclure que la conversion d' un objet est en fait la conversion de la référence de cet objet.

    Puisque manifestement, on ne modifie pas l' objet comme on le fait dans la conversion des types de base. ?
    C'est à force de programmer qu'on devient un bon programmeur

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Oui, c'est ca.

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Nayila Voir le message
    Après avoir réfléchi sur ces explications, dois-je en conclure que la conversion d' un objet est en fait la conversion de la référence de cet objet.

    Puisque manifestement, on ne modifie pas l' objet comme on le fait dans la conversion des types de base. ?
    Oui... mais je n'appellerais pas cela une conversion mais un transtypage (ou type casting en anglais).

    Dans un transtypage le type réel d'un objet ne change pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String string = "Hello";
    CharSequence sequence = string; // transtypage implicite
    String newString = (String) sequence; // transtypage explicite (exception possible à l'execution)
    On a un seul objet de type String !



    Pour moi une conversion correspond plus à un changement de type de l'objet (par exemple convertir une String en Date, ou une String en URL).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String string = "http://www.developpez.com"; // Une String représentant une URL
    URL url = new URL(string); // Une URL
    Le type a changé (on a deux objets distinct).


    a++

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/02/2004, 21h55
  2. [MFC] libération des objets GDI's
    Par Kevgeii dans le forum MFC
    Réponses: 5
    Dernier message: 01/02/2004, 10h37
  3. Créer des objets sur la pile ?
    Par Cornell dans le forum Langage
    Réponses: 8
    Dernier message: 03/03/2003, 11h47
  4. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14
  5. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo