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 :

Abstract et héritage


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut Abstract et héritage
    Bonjour,

    Je ne suis pas nouveau en Java mais j'ai un petit trou (à vrai dire çà fait quelques mois que j'en ai plus fait)

    J'ai une question.

    Dans le code suivant, j'aimerais que les appels à ActionFormSubscriber.processBeforeChecking passe également par le code de l'ancêtre (BelgiumAbstractNavAction.processBeforeChecking()
    càd la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date currentTime = new Date();
    Beaucoup de classes similaires à ActionFormSubscriber héritent de BelgiumAbstractNavAction, et je souhaite ajouter un comportement commun à toutes ces classes.

    Auparavant, les classes ActionFormSubscriber et similaires héritaient directement de AbstractNavAction, mais je n'ai pas la main sur cette classe, c'est pour cela que j'ai voulu créer une classe abstraite intermédiaire et l'utiliser pour mettre le code "commun".

    Voici donc mon code:

    Classe ActionFormSubscriber hérite de BelgiumAbstractNavAction
    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 ActionFormSubscriber extends BelgiumAbstractNavAction { 
     
    ...
     
    protected void processBeforeChecking(NavContext env) {
     
    		String postValue =  env.getParameter("postValue");
     
    		if (postValue!=null && postValue.endsWith(".refresh")) {
    			env.setCheckingModeActivated(false);
    		}
     
     
    	}
     
    ...
    }
    Classe abstraite BelgiumAbstractNavAction hérite de AbstractNavAction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public abstract class BelgiumAbstractNavAction extends AbstractNavAction {
    ...
    protected void processBeforeChecking(NavContext env)
    	{
    		Date currentTime = new Date();
     
     
     
    	}
     
    ...
    }
    Classe abstraite AbstractNavAction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public abstract class AbstractNavAction
    {
    ...
    protected void processBeforeChecking(NavContext env)
    	{
    	}
    ...
    }
    Merci d'avance pour votre aide!

    Nicolas.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Salut,

    si j'ai bien compris ta demande, il faut utiliser le mot clef super :



    http://java.developpez.com/faq/java/...sClesThisSuper


    bon courage

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    Merci! Je me rappelais de super mais je pensais que c'était juste pour les constructeurs, super()

    J'ai essayé, çà marche, merci bien

    Une question cependant, n'y a-t-il pas une manière de faire qui permet de minimiser le nombre de changements? J'aimerais que pour mes autres classes nouvellement héritant de BelgiumAbstractNavAction aient directement accès au processBeforeChecking() de BelgiumAbstractNavAction, sans avoir à rajouter l'appel à super()
    N'y a til pas une manière de faire (si par exemple je ne déclare pas BelgiumAbstractNavAction comme abstract mais comme classe normale?)

    Merci d'avance!

  4. #4
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Salut,
    avec un refactoring minime tu peux appliquer le design pattern "Template method" qui dans ton cas me semblerait répondre à ton souhait.

    interface de la classe mere (facultatif):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public interface IClasseMere {
     
    	void method1();
     
    }
    classe mere:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public abstract class ClasseMere implements IClasseMere{
     
    	public final void method1() {
    		//traitement commun
    		method2();
    		//traitement commun
    	}
     
    	protected abstract void method2();
     
    }
    une classe fille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class SousClasse1 extends ClasseMere{
     
    	@Override
    	protected void method2() {
    		//traitement specifique
    	}
     
    }
    En espérant avoir compris correctement ce que tu voulais faire.
    ++

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    Merci du conseil
    Je ne sais pas si dans mon cas çà va marcher, notamment parce que je n'ai pas accès à la classe en haut de l'arborescence (celle que j'ai noté AbstractNavAction) = je ne peux la modifier.
    Merci en tout cas je vais essayer.
    Comme j'ai résolu le problème, je marque çà comme résolu! :-)

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

Discussions similaires

  1. Héritage et abstraction
    Par Steph_ng8 dans le forum Langage
    Réponses: 15
    Dernier message: 05/05/2015, 16h03
  2. [PHP 5.3] Abstract méthode en héritage
    Par Général03 dans le forum Langage
    Réponses: 3
    Dernier message: 21/10/2011, 11h31
  3. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  4. Abstract VS virtual
    Par LE CHAKAL dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2002, 17h50
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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