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 :

Caster des class


Sujet :

Langage Java

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut Caster des class
    Bonjour,

    J'aimerais pouvoir caster une classe héritée en sa class mère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ///
    ObjectHerite extends ObjectMere(){
    ////
    }
    ///
     
    ObjectHerite= (ObjectHerite)objectMere ;
    Dans le code ca marche, mais le programme plante et dit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: java.lang.ClassCastException: monProgramme.Obj cannot be cast to monProgramme.ObjHerite
    Savez vous s'il existe une methode particulière afin de pouvoir caster des class ?

    Merci si vous pouvez m'aider.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    On ne caste pas des classes mais des instances. On ne peut caster une instance que si elle implémente directement ou indirectement une classe, ou une interface. Cela est inutile si la classe vers laquelle on caste est parente de la classe d'implémentation de l'objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class ObjectMere {
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class ObjectHerite extends ObjectMere {
    }
    Classe de test (qui compile).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Test {
     
       public static void main(String[] args) {
          ObjectHerite obj1 = new ObjectHerite();
          ObjectMere obj2 = new ObjectHerite();
          Object obj3 = new Object();
     
          ObjectMere obj4 = obj1; // cast inutile
          ObjectHerite obj5 = (ObjectHerite)obj2; // cast possible et indispensable
          ObjectHerite obj6 = (ObjectHerite)obj3; // cast impossible : provoque une ClassCastException
       }
    }
    Le casting sert uniquement à pouvoir manipuler l'instance par l'intermédiaire de la classe vers la quelle on caste.
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void methodeTruc(Object object) {
        if ( object instanceof Classe1 ) {
             Classe1 objClasse1 = (Classe1)object;
             // maintenant on peut appeler les méthodes de Classe1 sur l'instance object
        }
        if ( object instanceof Classe2 ) { 
             Classe2 objClasse2 = (Classe2)object;
             // maintenant on peut appeler les méthodes de Classe2 sur l'instance object
        }
    }
    Accessoirement, on peut utiliser la méthode cast() de Classe pour caster.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void methodeTruc(Object object) {
        if ( Classe1.class.isInstance(object) ) {
            Classe1 objClasse1 = Classe1.class.cast(object);
            // maintenant on peut appeler les méthodes de Classe1 sur l'instance object
        }
        if ( Classe2.class.isInstance(object) ) { 
            Classe2 objClasse2 = Classe2.class.cast(object);
            // maintenant on peut appeler les méthodes de Classe2 sur l'instance object
        }
    }
    PS: quand tu postes du code, le minimum est qu'il soit syntaxiquement correct.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    Ok, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Diagramme des classes pour l'interface visuel
    Par robv dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 25/06/2004, 10h50
  2. [debutant] Comment ajouter des .class ?
    Par Slein dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 30/04/2004, 14h30
  3. Créer les get et set des classes
    Par cameleon2002 dans le forum JBuilder
    Réponses: 3
    Dernier message: 17/09/2003, 21h03
  4. specifier les chemins des .class
    Par draken dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 29/07/2003, 09h35
  5. Inserer des classes java existantes
    Par 2000 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/03/2003, 12h35

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