java attributs
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

java attributs



  1. #1
    invite402e4a5a

    java attributs


    ------

    bonjour
    voici un programme :
    Code:
    class A {
       int n = 1;
       float x;
    }
    
    class B extends A {
       int n = 2;
       double x;
    
       void affiche() {
          System.out.println("dans B n vaut " + n + 
    		         " et le n de la classe A vaut " +  super.n);
      }
    }
    
    class Masquage {
       public static void main(String[]arg) {
          B b = new Inf();
          A a = b;
    
          b.affiche();
    
          System.out.println("a.n vaut " + a.n);
          System.out.println("b.n vaut " + b.n); 
      }
    }

    lors de l'execution on a :
    dans B n vaut 2 et le n de la classe A vaut 1
    b.n vaut 2
    a.n vaut 1


    pourriez vous m'expliquer pourquoi a.n vaut 1 ??
    a est de type A mais on lui a affecté b qui est de type B??
    merci

    -----
    Dernière modification par JPL ; 04/05/2011 à 15h33. Motif: Ajout de la balise Code

  2. #2
    invite1445654e

    Re : java attributs

    hum normalement tu as la reponse dans ton cours sur java sur l'héritage et le polymorphisme ...

  3. #3
    invite402e4a5a

    Re : java attributs

    merci pour votre reponse mais en effet je n'ai pas bien compris cette partie du cours c'est pour cela que je demande cette question.
    pourriez vous svp m'expliquer a.n vaut 1 et non pas 2 ??
    merci d'avance

  4. #4
    invite1445654e

    Re : java attributs

    du fait que B herite de A
    tu peux donc faire
    A a=b
    mais l'objet a est toujours une instance de la classe A meme si en fait il a la meme reference que l'objet b
    donc java fait ce qu'on lui dit
    a instance de A donc on demande a.n on fournit 1
    b instance de B donc on demande b.n on fournit 2

  5. A voir en vidéo sur Futura
  6. #5
    invite7265fdfc

    Re : java attributs

    Je vois les choses comme cela:

    Il s'agit d'illustrer le masquage des variables d'instance.
    La classe B a une variable d'instance n qui masque (occulte, mais ne remplace pas) la variable d'instance n de la classe A.
    Ce qu'il faut bien comprendre c'est que l'objet b contient en fait deux variables n: n et super.n

    L'objet a a été déclaré et initialisé ainsi : A a = b;

    Il est vrai que b et a référencient ici le même objet (c'est un même objet en mémoire, il n'y pas de clonage), mais c'est un objet qui gère deux variables n
    si je puis dire.

    Java utilise pour les variables une liaison statique ("la liaison sur les attributs est statique", Irène Charon, Apprendre Java): quand il rencontre c.n, il cherche le type de l'objet c et
    décide ensuite de la valeur à donner à n.

    exemples:
    b.n: b a pour type b, c'est donc la valeur de n qu'il va donner
    a.n: a a pour type a, c'est donc la valeur de super.n qu'il va donner

    supposons qu'on fasse b.n = 5
    a.n reste égal à 1 (super.n n'a pas changé)

    supposons qu'on fasse a.n = 3
    b.n reste égal à 5 (super.n a changé, mais pas n)

    Si on avait fait: B c = b, c et b ayant tous deux le type B, b.n = 5 aurait aussi changé c.n, qui serait devenu 5

    La redéfinition des méthodes n'obéit pas à la même règle:
    supposons qu'on rajoute dans la classe A un get() et un set() pour gérer n, et qu'on redéfinisse set() et get() dans la classe B (avec une même implémentation).

    a.set(3) induirait a.n = 1 et b.n = 3 !

    Pourquoi ? parce que cette fois, pour les méthodes, la liaison est dynamique: Java choisit la méthode set() de la classe B et cette méthode change la valeur de n.
    super.n ne change donc pas, mais n change et donc b.n = 3

    "Même si l'on crée une instance d'une classe que notre classe n'a jamais vue (par exemple ... via le réseau),, et lui affectons une variable d'un type plus général, les méthodes redéfinies dans la nouvelle classe seront identifiées et appelées pour remplacer celles qui existaient lors de la dernière compilation de notre code"
    (Introduction à Java, par Niemeyer & Knudsen, O'Reilly)

Discussions similaires

  1. Modifier les attributs d'images
    Par invitec1cd705e dans le forum Logiciel - Software - Open Source
    Réponses: 15
    Dernier message: 17/02/2010, 17h54
  2. Java, java, java, where are you, there's a mission for you !
    Par invite1237a629 dans le forum Logiciel - Software - Open Source
    Réponses: 35
    Dernier message: 16/03/2008, 23h10
  3. Les attributs de Vénus
    Par invite4b0a59dd dans le forum Biologie
    Réponses: 11
    Dernier message: 14/09/2006, 17h37
  4. attributs leture seule.
    Par Lycaon dans le forum Internet - Réseau - Sécurité générale
    Réponses: 5
    Dernier message: 28/05/2004, 14h16