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 :

Question à propos de l'héritage


Sujet :

avec Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Par défaut Question à propos de l'héritage
    bonjour;
    je voudrais s'il vous plait savoir si les variables static dans une classe sont hérité dans une sous classe je sais que les méthodes static sont pas hérite mais pour les variables static je sais pas.
    merci

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Les variables et les méthodes static sont héritées par les sous-classes : elles y ont accès direct (sauf si elles sont private bien sûr).

    Je ne sais pas pourquoi tu dis que les variables static ne sont pas héritées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Mere {
      public static int donnée = 0;
    }
     
    class Fille extends Mere {
     
      int doSomething() {
        // ça compile, ça marche : Fille a donc hérité de donnée.
        donnée++;
        return donnée;
      }
     
    }
    Il y a une différence entre static et pas-static, oui, et cette différence est la même à l'héritage. Ça ne veut pas dire qu'il n'y a pas d'héritage.

    De la même manière, les méthodes sont héritées 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
    15
    public class Mere {
      public static void faireQuelqueChose() {
     
      }
    }
     
    class Fille extends Mere {
     
      public int doSomethingElse() {
        // ça compile, ça marche : Fille a donc hérité de faireQuelqueChose().
        faireQuelqueChose();
        return 0;
      }
     
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Par défaut
    je te recopie ce que j'ai sur mon cours peut etre que j'ai due mal comprendre

    cas des méthodes statiques
    -(Cf. remarque début cours aujourd'hui)
    -une méthode statique n'est jamais héritée
    -mais elle accepte des arguments d'une sous-classe

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Bah c'est une question de définition. Qu'est-ce que ça veut dire au juste.

    Qu'est-ce que ça veut dire, hériter d'une variable membre ?
    Qu'est-ce que ça veut dire, hériter d'une méthode ?

    Ça veut dire une chose toute simple : quand une classe fille hérite d'une variable ou d'une méthode d'un type ascendant (classe mère, classe grand-mère, interface implémentée...)
    ça signifie que la classe fille a accès à cette variable ou cette méthode, avec la même syntaxe que si elle avait elle-même défini la variable ou la méthode. Elle la "voit" et peut s'en servir de la même manière que sa classe mère.

    C'est ce qu'illustrent mes exemples au-dessus.
    Selon cette définition, les variables et méthodes sont héritées, qu'elles soient statiques ou pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Par défaut
    merci thelvin heureusement que j'ai posé la question sinon je serais partie sur de mauvaise base

  6. #6
    Membre expérimenté Avatar de Vikisme
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 172
    Par défaut
    Petite précision, lorsque l'on dit que les variables statiques ne sont pas héritées, c'est sans doute pour préciser que même si on y a accès, la variable n'est pas héritée dans le sens ou elle reste propre à la classe Mère...
    Je m'explique, dans l'exemple ci-dessus, la fille a accès la variable "donnée" qu'elle peut manipuler. Mais si elle manipule cette variable, elle ne manipule pas une variable propre à la fille mais bien celle de la mère... Si une autre classe hérite de la classe Mère et qu'elle manipule également la variable "donnée", il ne faudra pas oublié que cette variable statique est celle de la mère et non des filles (attention aux effets de bord).

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Un nuance de taille quand même à apporter. Cet "héritage" n'est pas dans la JVM, uniquement au moment de la compilation. C'est le compilateur, quand il vois que tu demande B.a() et qu'il vois que a() est défini dans A et non dans B extends A qui remplace l'appel par un invokestatic A.a

    autrement dit, Si tu met dans ta classe Main un appel B.a, que tu ne recompile jamais cette classe et que, demain, tu définis dans B cette méthode a() (plutot que d'hériter celle de A), le main fera toujours appel à A.a.

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Citation Envoyé par Vikisme Voir le message
    Petite précision, lorsque l'on dit que les variables statiques ne sont pas héritées, c'est sans doute pour préciser que même si on y a accès, la variable n'est pas héritée dans le sens ou elle reste propre à la classe Mère...
    Je m'explique, dans l'exemple ci-dessus, la fille a accès la variable "donnée" qu'elle peut manipuler. Mais si elle manipule cette variable, elle ne manipule pas une variable propre à la fille mais bien celle de la mère... Si une autre classe hérite de la classe Mère et qu'elle manipule également la variable "donnée", il ne faudra pas oublié que cette variable statique est celle de la mère et non des filles (attention aux effets de bord).
    Oui... Les variables non-statiques aussi, c'est celles de la classe mère. Bien sûr, puisqu'elles sont non-statiques, c'est lié aux instances et donc il y en a une pour chaque instance de la classe Mère ou d'une classe descendant de la classe mère.
    Une variable statique n'étant pas liée aux instances mais aux classes, il n'y en a qu'une, attachée à la classe mère.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/07/2014, 14h11
  2. Questions à propos de l'héritage en Java
    Par soze92 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 17/08/2012, 23h27
  3. Petite question à propos du redbook...
    Par Michaël dans le forum OpenGL
    Réponses: 3
    Dernier message: 04/11/2004, 13h54
  4. Petite question à propos d'une requete
    Par ViBy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/09/2004, 13h21
  5. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 15h03

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