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

avec Java Discussion :

Variable statique et l'héritage


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut Variable statique et l'héritage
    Bonjour tous le monde,

    Je souhaite savoir si les variables statiques sont hérité par les classes files d'une classe mère?

    Merci de me donné un exemple concret.

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par naou18 Voir le message
    Je souhaite savoir si les variables statiques sont hérité par les classes files d'une classe mère?
    Tu devrais faire un petit exemple pour voir la réponse par toi-même. Néanmoins, la réponse à ta question est : non, les éléments static ne s'héritent pas. Pourquoi veux tu faire cela ?
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Oui, et les variables non-statiques aussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class A {
     
      protected static final String MESSAGE = "Bonjour !";
     
    }
     
    public class B extends A {
     
      public static void main(String[] args) {
        // variable MESSAGE visible, donc héritée.
        System.out.println(MESSAGE);    
      }
     
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    Néanmoins, la réponse à ta question est : non, les éléments static ne s'héritent pas. Pourquoi veux tu faire cela ?
    Un petit exemple, tel que le mien, prouve justement le contraire -_-°.

    Le problème étant toujours le même : personne ne sait jamais ce que ça veut dire, hériter de quelque chose.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Un petit exemple, tel que le mien, prouve justement le contraire -_-°.

    Le problème étant toujours le même : personne ne sait jamais ce que ça veut dire, hériter de quelque chose.
    Et question alors tant qu'à dire des bêtises. Si je fais la manipulation suivante :
    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
    public class A {
       public static String message = "Bonjour !";
    }
     
    public class B extends A {
     
      public static void main(String[] args) {
        message = "toto";
        new C();
      }
    }
     
    public class C {
      public C() {
        System.out.println(A.message);
      }
    }
    Quel sera la valeur de mon System.out ?
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  6. #6
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    Voila un exemple qui ressemble un peu à ce que j'ai rencontrer dans un QCM :
    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
    public class A{
    static int i = 1;
     
    show(){
    syso("la valeur de i"+ i);
    }
    }
    }
    public class B extends A{
    int i=1;
    show(){
    syso("la valeur de i"+ i);
    }
    }
    main(String args[]){
    A a = new B();
    a.show();
    }
    j'attend la réponse à la question de Robin56
    Merci de votre aide.

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Quel sera la valeur de mon System.out ?
    Par bonne foi, je réponds sans essayer de lancer l'exemple : cela affichera "toto" (sans les guillemets.)

    La variable message, variable statique de la classe A, est bel et bien héritée par la classe B. Ce qui signifie que cette variable fait partie du contexte de B, hérité du contexte de A, et donc que B peut lire et écrire dans cette variable qui est à A.

    Donc la ligne suivante compile et modifie la variable en question :

    S'il n'y avait pas héritage, elle ne compilerait pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Par bonne foi, je réponds sans essayer de lancer l'exemple : cela affichera "toto" (sans les guillemets.)
    J'étais justement entrain de faire le test. C'est donc bien ce que je pensais. A la différence d'une variable non static, l'on est en train de modifier la valeur de la classe mère.

    Tu as donc ta réponse naou18.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par naou18 Voir le message
    Voila un exemple qui ressemble un peu à ce que j'ai rencontrer dans un QCM :
    La situation est différente.

    Ici la classe B, qui hérite de A, hérite bel et bien de la variable i de la classe A.

    Seulement, B définit sa propre variable i, de même nom. Puisqu'elle a le même nom, elle masque la variable i de la classe A.
    Le contexte de B ne lui permet donc plus d'accéder à la variable i de la classe A. Seulement à sa propre variable i. Pour accéder à celle de la classe A, elle va devoir faire comme le reste du monde :
    En l'occurrence, sa méthode show() n'accède qu'à une variable i, donc dans son contexte, donc celle de B.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    Effectivement j'ai eu ma réponse, donc les variables statiques sont hérité.
    si j'ai bien compris parce que j'ai fait le test et j'ai eu le même résultat == toto.
    Mais ça contra dit ce qui à était dit au début, tans mieux.

  11. #11
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    il n'est absolument pas question d'héritage avec les variables static mais de "lien "de nommage: si tu as dans la classe mère une variable statique "visible" elle sera liée à ton code; si dans la classe courante tu définis à nouveau une variable statique de même nom il y aura occultation ("hiding" d'après la norme): le compilateur décide du lien à adopter à la compilation en fonction du type déclaré de l'objet sur lequel on demande la variable. inutile de dire que ce genre de chose est à éviter absolument pour ne pas tomber dans des codes byzantins.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  12. #12
    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
    Salut,


    Tout à fait d'accord avec professeur shadoko qui a tout dit !
    Les éléments static ne font pas partie de l'instance donc cela ne peut pas être hérité... C'est juste visible !


    a++

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    si tu as dans la classe mère une variable statique "visible" elle sera liée à ton code
    Les JLS appellent cela un truc hérité de la classe mère. Que ce soit statique ou non. Que ce soit une variable, une méthode, ou un type imbriqué.
    Tous ces trucs-là sont hérités.

    Edit : C'est pourtant pas compliqué...
    Visible parce qu'hérité du contexte de la classe mère <=> hérité.
    À quoi ça sert de discuter de ce qui est hérité ou pas alors qu'on n'a même pas dit ce que ça veut dire, hériter ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Edit : C'est pourtant pas compliqué...
    Visible parce qu'hérité du contexte de la classe mère <=> hérité.
    À quoi ça sert de discuter de ce qui est hérité ou pas alors qu'on n'a même pas dit ce que ça veut dire, hériter ?
    Je plussoie Thelvin. Tout dépend de votre définition de l'héritage.

    Mais au sens strict tel qu'enseigné dans les manuels Java la réponse semble être non (mais je n'ai pas trouvé explicitement la ligne l'affirmant).

  15. #15
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par deathness Voir le message
    Je plussoie Thelvin. Tout dépend de votre définition de l'héritage.

    Mais au sens strict tel qu'enseigné dans les manuels Java la réponse semble être non (mais je n'ai pas trouvé explicitement la ligne l'affirmant).
    C'est aussi l'impression que j'ai eue pendant longtemps. Mais quand j'ai voulu remplacer l'impression par de la certitude, je suis tombé des nues.
    En réalité, plein de choses parlent de l'héritage, en Java et autres, mais c'est bien plus difficile de trouver une définition correcte de ce que c'est, l'héritage. Et encore plus, de ce que ça veut dire hériter d'une variable, une méthode, un type imbriqué.

    Face à ce qui devenait une impasse, je me suis tourné vers ce que les JLS appellent "hériter d'une variable, méthode ou type imbriqué."
    Je suis ouvert à la discussion, mais même si au début je m'attendais à complètement autre chose, aujourd'hui j'y vois une certaine logique. Il me semble qu'avant je confondais "hériter d'un truc" avec d'autres notions.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par thelvin Voir le message
    C'est aussi l'impression que j'ai eue pendant longtemps. Mais quand j'ai voulu remplacer l'impression par de la certitude, je suis tombé des nues.
    En réalité, plein de choses parlent de l'héritage, en Java et autres, mais c'est bien plus difficile de trouver une définition correcte de ce que c'est, l'héritage. Et encore plus, de ce que ça veut dire hériter d'une variable, une méthode, un type imbriqué.

    Face à ce qui devenait une impasse, je me suis tourné vers ce que les JLS appellent "hériter d'une variable, méthode ou type imbriqué."
    Je suis ouvert à la discussion, mais même si au début je m'attendais à complètement autre chose, aujourd'hui j'y vois une certaine logique. Il me semble qu'avant je confondais "hériter d'un truc" avec d'autres notions.
    Je peux savoir tu confondis quoi ?

  17. #17
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par naou18 Voir le message
    Je peux savoir tu confondis quoi ?
    "Variable héritée" et "variable qui fait partie de l'état maintenu par les instances des sous-classes," principalement.

    Pour autant que je sache, la deuxième notion n'a pas de nom, mais beaucoup de gens font comme si c'est ce qu'on appelait une variable héritée.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par thelvin Voir le message
    "Variable héritée" et "variable qui fait partie de l'état maintenu par les instances des sous-classes," principalement.

    Pour autant que je sache, la deuxième notion n'a pas de nom, mais beaucoup de gens font comme si c'est ce qu'on appelait une variable héritée.
    Merci, mais ce n'est toujours pas claire, jusqu’à présent et avant d'ouvrir cette discussion, ce que je savais que les variables statiques n’était pas héritée, mais cette discussion à prouver le contraire.

  19. #19
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par naou18 Voir le message
    Merci, mais ce n'est toujours pas claire,
    En même temps tu m'as demandé ce que je confondais. Quand les choses sont claires, je ne confonds rien, merci.

    Citation Envoyé par naou18 Voir le message
    jusqu’à présent et avant d'ouvrir cette discussion, ce que je savais que les variables statiques n’était pas héritée, mais cette discussion à prouver le contraire.
    Non, cette discussion a prouvé que personne ne sait ce que ça veut dire, "hériter d'une variable."

    Par conséquent, ça ne sert à rien de demander si des choses sont héritées, puisque, que la réponse soit oui ou non, de toute façon tu ne sais pas à quoi on a répondu oui ou non.

    Qu'est-ce que tu veux savoir au juste, à propos des variables statiques et des sous-classes ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  20. #20
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Qu'est-ce que tu veux savoir au juste, à propos des variables statiques et des sous-classes ?
    Beh le titre explique déjà, ce que je veux savoir, si les variables statiques sont héritée ou non.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] héritages de propriétés friend/public et variables statiques/modules
    Par billybobbonnet dans le forum Développement Windows
    Réponses: 0
    Dernier message: 05/09/2014, 13h03
  2. Héritage et variable statique
    Par darkrojo dans le forum Débuter
    Réponses: 9
    Dernier message: 10/08/2011, 13h52
  3. [PHP 5.0] [POO] Héritages de variables statiques
    Par LogistiX dans le forum Langage
    Réponses: 7
    Dernier message: 21/01/2009, 18h07
  4. Utilisation d'une variable statique
    Par kurkaine dans le forum C++Builder
    Réponses: 6
    Dernier message: 14/06/2006, 13h49
  5. Exportation de variable statique
    Par Laurent Gomila dans le forum C++
    Réponses: 16
    Dernier message: 31/08/2005, 16h32

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