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 :

Comment appeler une méthode père depuis la classe père


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Comment appeler une méthode père depuis la classe père
    Hello,

    voici mon problème:

    Je dispose d'une classe père qui est étendue par une classe fils.
    La classe fils surcharge une méthode de la classe père (meme nom, meme nombre d'arguments).
    L'appel de cette classe se fait par le constructeur (réciproquement ds les deux classes).

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class pere
    {
     public pere()
     {
       methode();
     }
     
     methode()
     {
       do x;
      }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class fils extends pere
    {
     public fils()
     {
       super();
       methode();
     }
     
      methode()
     {
       do y;
      }
    }
    Lorsque j'instancie la classe fils et qu'elle se trouve ds le constructeur père, l'instance this équivaut à l'objet fils qui est en train d'être construit, du coup l'appel de methode() depuis le constructeur père est redirigé vers methode() de la classe fils.

    Comment faire pour que depuis le constructeur de la classe pere, l'appel de methode soit celle de la classe père?

    Merci pour votre aide,

    Tanguy

  2. #2
    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,


    Je dirais que c'est un problème de conception : sauf cas particulier, un constructeur ne devrait pas utiliser de méthode virtuelle qui pourrait être redéfini dans une classe fille.

    Ainsi un constructeur devrait se limiter à appeler ses méthodes final, private ou static.

    a++

  3. #3
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Comme adiGuba, je pense que c'est un problème de conception.

    Dans ton exemple, en appelant le constructeur du fils, tu as à l'execution :
    do y; // puisque la méthode appelée dans le constructeur du père est celle du fils (c'est le comportement normal)
    do y; // puisque tu la rappelles à nouveau dans le constructeur du fils.

    Tu veux peut être, en appelant le constructeur du fils, avoir à l'execution :
    do x;
    do y;

    Écris alors ton code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class pere
    {
     public pere()
     {
       methode();
     }
     
     methode()
     {
       do x;
     }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class fils extends pere
    {
     public fils()
     {
       super();
     }
     
     methode()
     {
       super.methode();
       do y;
      }
    }



    La classe fils surcharge une méthode de la classe père (meme nom, meme nombre d'arguments).
    Au fait, la surcharge, c'est quand le type des arguments est différent.
    Lorsque la signature de la méthode est la même (comme dans cet exemple), on dit que c'est une redéfinition.

    Je voulais juste le préciser car c'est un abus de langage fréquent chez les développeurs français.

Discussions similaires

  1. Comment appeler une méthode public depuis une autre class
    Par Gregi dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 01/03/2010, 10h08
  2. Réponses: 6
    Dernier message: 25/04/2007, 18h07
  3. Réponses: 2
    Dernier message: 31/08/2005, 16h12
  4. Comment appeler une fonction JavaScript depuis Delphi ?
    Par Alfred12 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 18h15

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