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 :

méthodes de classe et sous-classe


Sujet :

Langage Java

  1. #1
    Membre averti
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Points : 448
    Points
    448
    Par défaut méthodes de classe et sous-classe
    Bonjour,

    J'ai une question à propos des mécanismes employés par Java dans le cadre de l'utilisation de méthodes de classes dans des classe héritées.

    J'ai une première classe A qui définit une méthode d'instance afficher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class A {
      public void afficher() {
        System.out.println("méthode de A");
      }
    }
    puis je créé une deuxième classe, héritée de la première :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class B extends A {
      public void afficher() {
        System.out.println("méthode de B");
      }
    }
    jusque là, pas de problème. Lorque j'écrit le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    A a;
    a = new A();
    a.afficher();
    a = new B();
    a.afficher();
    on obtient bien :
    "méthode de A"
    "méthode de B"

    Mon problème est que lorsque je rajoute le qualificatif static devant les méthodes afficher, le même code produit les texte :
    "méthode de A"
    "méthode de A"

    et je ne comprend pas pourquoi. En quoi la notion de méthode de classe est-elle liée avec la notion de classe héritée ?

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Bonjour,

    dans ton code le premier cas (sans les static) c'est l'intance qui defini quelle methode et appeller donc quelle new tu a fait.
    dans le deuxiemme cas c'est la class qui defini l'appelle et vu que les deux appelle d'afficher sont fait avec un objet declarer en tant que A c'est donc le A.fficher qui et appeler.

    Cordialement

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Points : 413
    Points
    413
    Par défaut
    J'irai même plus loin en disant qui ne faut pas appeller des méthodes statiques a partir d'une instance mais uniquement a partir d'une classe. Tu dois d'ailleurs sans doute avoir un warning dans ton IDE.

  4. #4
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A a;
    a = new A();
    a.afficher();
    a = new B();
    a.afficher();
    On voit là clairement la différence entre méthode d'instance et méthode classe,quand tu mets "static" devant ça veut dire c'est une méthode de classe, or dans tes instanciations a est de type A, donc normal que ce soit tjrs la méthode A qui soit appelée, c'est même une technique déconseillée de le faire ainsi, quelqu'un l'a d'ailleurs souligné plus haut, les méthodes de classe doivent simplement être préfixées par le nom de la Classe et non l'instance.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Points : 448
    Points
    448
    Par défaut
    Merci, j'ai compris !

    C'est un peu commen en c++ finalement, où l'on doit ajouter le qualificatif virtual pour obliger le compilateur à chercher les méthodes de classes dans les sous-classes...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/12/2008, 20h51
  2. Classe et sous-classe : Visibilité
    Par JohnNC dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2008, 13h38
  3. [Reflection] Obtenir les sous-classes d'une classe
    Par El Saigneur dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 11/06/2007, 07h14
  4. [POO] Organiser ses classes (en sous classes)
    Par alexfrere dans le forum Langage
    Réponses: 5
    Dernier message: 20/03/2007, 13h07
  5. Super classes et sous-classes/Méthodes
    Par smag dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2005, 23h10

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