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 :

Héritage, attributs, cast


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut Héritage, attributs, cast
    Bonjour,

    J'ai quelques interrogations sur le comportement de l'héritage avec des attributs et des cast. Etant habitué à Python, je trouve ces comportements choquants. Dans le code ci dessous, pourquoi est-ce que:
    - new CC().x() renvoie BB.x et non CC.x ?
    - ((BB) new DD()).x renvoie BB.x et non DD.x, alors que dans le cas de méthode, c'est bien DD.x() qui est appelé ?

    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public static class BB {
        public int x = 1;
        public int x() {return this.x;}
    }
    public static class CC extends BB {
        public int x = 2;
    }
    public static class DD extends BB {
        public int x = 3;
        public int x() {return this.x;}
    }
    // why can't CC.x() access to CC.x ?
    System.out.println(new DD().x() ); // ok: 3
    System.out.println(new CC().x() ); // 1
     
    // why are methods different from attributes when cast
    System.out.println(((BB) new DD()).x() ); // ok: 3
    System.out.println(((BB) new DD()).x ); // 1 !

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    C'est toute la différence entre typage statique et typage dynamique.

    new CC().x() renvoie BB.x et non CC.x ?
    int x sert à définir une nouvelle variable nommée x, pas à réutiliser une variable qui existerait déjà.
    La méthode x() est une méthode de la classe BB, elle n'est donc concernée que par les variables de la classe BB. L'existence d'une classe CC ou de variables dans cette autre classe, ne la concernent pas.

    Bien sûr Java a un mécanisme de polymorphisme où les classes filles peuvent changer des choses définies par la classe mère. Mais cela ne s'applique qu'aux méthodes, pas aux variables.

    ((BB) new DD()).x renvoie BB.x et non DD.x, alors que dans le cas de méthode, c'est bien DD.x() qui est appelé ?
    Donc répétition de la dernière phrase, les méthodes peuvent être redéfinies, c'est le principe du polymorphisme. Mais les variables, non.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    C'est clair ! Merci bcp Thelvin.

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

Discussions similaires

  1. Héritage, Généricité, Cast?!
    Par aroussi_sanaa dans le forum Général Java
    Réponses: 1
    Dernier message: 04/05/2009, 11h10
  2. Héritage et casting en java
    Par menzlitsh dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2007, 12h23
  3. héritage attributs privés
    Par charlene44 dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 16/05/2007, 00h33
  4. héritage et casting
    Par dinver dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2005, 23h23
  5. [DP][héritage]sous-casting dynamique
    Par Le prophete dans le forum Général Java
    Réponses: 4
    Dernier message: 20/08/2004, 11h56

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