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 :

Héritage et redéfinition de méthode


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Points : 66
    Points
    66
    Par défaut Héritage et redéfinition de méthode
    Bonjour,

    J'ai une question concernant l'écriture d'un code propre lié à un héritage.

    J'ai une classe abstraite parente (MaClasseAbstraite), et deux classes filles qui étendent cette classe (Classe1 et Classe2).
    Dans MaClasseAbstraite, j'ai une méthode (maMethode) qui teste différents cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public boolean maMethode(){
    	if(cas1){
    	        appelleAUnePremiereMethode();
    	}
    	else if(cas2){
    		appelleAUneSecondeMethode();
    	}
    	...
    }
    Cette méthode convient tout à fait pour la Classe1, mais dans le cas de la Classe2, j'aimerais rajouter un «else if(cas3)» dans la liste pour appeler un nouveau traitement spécifique à ma Classe2.

    Comment faire cela proprement ?

    En effet, je peux réécrire maMethode dans Classe1 et Classe2, mais cela impliquerait beaucoup de duplication de code puisque tous les premiers «if, else if» seraient identiques dans ces deux classes.
    Je peux également tester dans MaClasseAbstraite si l'objet courant est une instance de Classe2, et effectuer le nouveau test dans ce cas, mais la classe parente n'a a priori pas de raison d'avoir accès à ses classes filles...

    Quelqu'un a-t-il une idée pour résoudre ce problème proprement ?

    Je vous remercie par avance !

  2. #2
    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
    Le plus propre, c'est au cas par cas. Ça dépend de ce qu'il y a d'unique à ta situation.

    De manière générale, dans ce cas-là, on peut imaginer ça :

    Modifier MaClasseAbstraite comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    protected void prepareMaMethode() {
      if(cas1){
        appelleAUnePremiereMethode();
      } else if(cas2){
        appelleAUneSecondeMethode();
      }  // fini, rien d'autre, la méthode s'arrête là
    }
     
    public boolean maMethode(){
      prepareMaMethode();
      ...
    }
    Puis, dans ta Classe2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected void prepareMaMethode() {
      if(cas3){
        appelleUneTroisiemeMethode();
      } else {
        super.prepareMaMethode();
      }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Si Classe1 n'est ni dans cas1 ni dans cas2, maMethode() ne fait rien ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    Je vous remercie pour vos réponses.

    En fait, Classe1 est forcément dans cas1 ou cas2, et Classe2 peut-être soit dans cas1, cas2 ou cas3.

    Ta solution me parait pas mal thelvin. L'idée de passer par une méthode intermédiaire permet de bénéficier de l'héritage tout en évitant la répétition de code. Je devrais arriver à me débrouiller avec ça !

    Merci beaucoup !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/07/2009, 21h18
  2. héritage et redéfinition de méthodes
    Par Braillane dans le forum Langage
    Réponses: 4
    Dernier message: 07/01/2007, 18h47
  3. redéfinition de méthode et invocation
    Par magedo dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2007, 19h00
  4. Réponses: 4
    Dernier message: 03/07/2006, 22h52
  5. [JPanel][LayoutManager] redéfinition de méthodes
    Par _KB_ dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 06/06/2006, 14h22

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