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

Java Discussion :

Caster classe mère et classe fille


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 139
    Points : 26
    Points
    26
    Par défaut Caster classe mère et classe fille
    Bonjour, je voudrais savoir les erreur que je les ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class A {
    }
    public class B extends A {
    }
    public class Main {
    	public static void main(String args[])
    	{
    		A a=new A();
    		B b=new B();
    		A a1=b;
    		a1=(B)b;
    		b=(B)a;
    }
    }
    Merci

  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,

    Quand tu écris b=(B)a;, tu dis "j'ai une variable (a) qui pointe que une instance de classe A, et je la spécialise avec la classe B pour la mettre dans une variable de type B", mais si a est de classe A, elle n'est pas de classe B, donc tu obtiens une erreur de type ClassCastException. B étend A, donc n'est pas A. Si tu avais écrit au début du code A a = new B();, tu aurais pu, puisque l'instance référencée par la variable a aurait bien été de classe B.

    En résumé, on peut caster une instance de classe fille par une classe compatible, c'est-à-dire par cette classe, ou par une classe parente (ou parente de sa parente, etc...). Lorsqu'on affecte la variable à une autre variable, la classe vers laquelle on caste doit être compatible avec le type de la variable source, et avec la variable destination.

    Le cast n'est pas une espèce de conversion : c'est simplement un moyen d'affecter une instance de classe dans une variable d'un type différent, mais compatible (donc soit une classe parente (ou parente de, etc.), soit une interface implémentée). Le cast est indispendable lorsqu'on a besoin de spécialiser une instance d'une classe plus générale, comme dans l'exemple suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void faire(A a) { // on peut passer en argument des instances de A, ou de B
        if ( a instanceof B ) { // si a référence une instance de classe B
           B b = (B) a; // on spécialise l'instance référencée par la variable a en classe B (ce qu'on a vérifié par le test avant), pour la mettre dans une variable de type B (indispensable de caster ici)
           // maintenant on peut appeler des méthodes spéciifques de B (qui n'existent pas dans A) par la variable b (ce qu'on ne pourrait pas faire directement par a)
        }
    }
    Il est inutile de caster pour mettre une instance dans une variable de classe parente (ou parente de, etc.). On peut toujours écrire ;
    Code pseudojava : Sélectionner tout - Visualiser dans une fenêtre à part
    Object variable = une variable de n'importe quel type, puisqu'ils étendent tous finalement Object
    ou
    Code pseudojava : Sélectionner tout - Visualiser dans une fenêtre à part
    Object variable = new n'importe quelle classe
    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.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/06/2015, 14h07
  2. Conversion d'une classe mère en classe fille
    Par Aleph69 dans le forum C++
    Réponses: 7
    Dernier message: 07/05/2014, 10h39
  3. caster une classe mère en classe fille
    Par franchouze dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 01/10/2009, 11h56
  4. class pour table + class pour td = class td non fonctionnelle ?
    Par supergrey dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 28/05/2009, 08h13
  5. Lister toutes les sous-classes d'un classe mère
    Par Kerod dans le forum Langage
    Réponses: 10
    Dernier message: 09/02/2009, 19h21

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