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 :

Forcer la surcharge d'une méthode


Sujet :

Langage Java

  1. #1
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut Forcer la surcharge d'une méthode
    Bonjour,

    j'ai 2 classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class IFrameCommun extends JTrafficInternalFrame
    {
        ...bla bla plein de méthodes bla bla...
     
        public void closeDialog()
        {
            .... du code
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class DialogBoxConfiguration extends IFrameCommun
    {
        ...bla bla plein de méthodes bla bla...
     
        @Override
        public void closeDialog()
        {
            .... du code .....
     
            super.closeDialog();
        }
    }
    Je cherche un moyen pour qu'il soit obligatoire pour que la deuxième classe surcharge la méthode closeDialog() de IFrameCommun


    En fait des classes comme la deuxième dans mon projet j'en ai plein, mais je voudrais pas oublier de surcharger la méthode qqpart, donc je voudrais que le projet ne compile pas si j'oublie la surchage, un peut comme une classe qui implémenterais pas toutes les méthodes d'une interface.

    J'espère ne pas me mélanger

    Merci d'avance.

  2. #2
    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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Définie la en "abstract".
    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.

  3. #3
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    cela semble être ce que je veux faire, mais dans la FAQ java, la méthode abstraite de la classe abstraite, est déclarée comme pour une interface : sans code, or moi je veux laisser le code qui est dedans

  4. #4
    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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par BakaOnigiri Voir le message
    cela semble être ce que je veux faire, mais dans la FAQ java, la méthode abstraite de la classe abstraite, est déclarée comme pour une interface : sans code, or moi je veux laisser le code qui est dedans
    Je m'en doutais ;-)
    J'imagine que tu vas toujours appeler la méthode de la classe mère ?
    Alors je ne vois pas de solution directe, à part faire une classe abstraite commune AbstractIFrameCommun :
    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 abstract class AbstractIFrameCommun extends JTrafficInternalFrame
    {
      ...bla bla plein de méthodes bla bla...
     
      public void closeDialog()
      {
        internalCloseDialog();
        .... du code
      }
     
      protected abstract internalCloseDialog()
      {
        ...
      }
    }
    Toutes les autres classes, y compris "IFrameCommun", vont dérivées de cette classe abstraite. Elles seront obligées de déclarer "internalCloseDialog".
    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.

  5. #5
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    bon çà me fait changer trop de chose, donc le corp de ma méthode closeDialog dans IFrameCommun, passe dans une méthode plop(), j'ai mis comme expliqué closeDialog en abstract, et il faudra que je me force d'appeler plop() dans les classe qui dérivent de IFrameCommun, c'est pas génial, mais c'est le plus simple à mettre en place.


    Merci dinobogan

  6. #6
    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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Et du coup, tu n'as pas résolu ton problème de départ
    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.

  7. #7
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour,
    Juste pour info, on parle ici de redéfinition et pas de surcharge.

  8. #8
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Ou alors peut-être :
    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
    18
    19
    20
    21
    22
    23
    24
    public class IFrameCommun extends JTrafficInternalFrame
    {
        ...bla bla plein de méthodes bla bla...
     
        public abstract void closeDialog();
     
        protected void closeDialogImpl()
        {
            .... du code
        }
    }
     
    public class DialogBoxConfiguration extends IFrameCommun
    {
        ...bla bla plein de méthodes bla bla...
     
        @Override
        public void closeDialog()
        {
            .... du code .....
     
            super.closeDialogImpl();
        }
    }

  9. #9
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    djo.mos merci pour l'info, je vais essayer de retenir le terme.

    herve91 oui au final c'est ce que je fais, çà fait ce que je veux grace à dinobogan j'ai opté pour ce code, bien sûr çà m'oblige à appeler à chaque fois une méthode super. et il faut pas que j'oublie de l'appeler, mais çà reste le plus simple pour moi

  10. #10
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonne idée Hervé
    Mais ce serait mieux d'inverser la donne, comme ça:
    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
    18
    19
    20
    21
    22
     
    abstract class Base {
    	protected abstract void toBeOverridden();
    	public void aMethod() {
    		toBeOverridden();
    		System.out.println("Base.defaultImpl()");
    	}
    }
     
    class Actual extends Base {
    	@Override
    	protected void toBeOverridden() {
    		System.out.println("Actual.toBeOverridden()");
    	}
    }
     
    public class Test {
    	public static void main(String[] args) {
    		Actual a = new Actual();
    		a.aMethod();
    	}
    }
    Pour eviter le cas ou la classe fille n'appèle pas le code du parent

  11. #11
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    en fait dans mon cas c'est la classe Actual qui doit appeler le code, çà fonctionne 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
    16
    17
    18
    19
     
    abstract class Base {
    	protected abstract void toBeOverridden();
    	public void aMethod() {
    		toBeOverridden();
    		System.out.println("Base.defaultImpl()");
    	}
    }
     
    class Actual extends Base {
    	@Override
    	protected void toBeOverridden() {
    		System.out.println("Actual.toBeOverridden()");
    	}
     
    	private void plop(){
    		aMethod();
    	}
    }

  12. #12
    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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par djo.mos Voir le message
    Bonne idée Hervé
    Mais ce serait mieux d'inverser la donne, comme ça:
    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
    18
    19
    20
    21
    22
     
    abstract class Base {
    	protected abstract void toBeOverridden();
    	public void aMethod() {
    		toBeOverridden();
    		System.out.println("Base.defaultImpl()");
    	}
    }
     
    class Actual extends Base {
    	@Override
    	protected void toBeOverridden() {
    		System.out.println("Actual.toBeOverridden()");
    	}
    }
     
    public class Test {
    	public static void main(String[] args) {
    		Actual a = new Actual();
    		a.aMethod();
    	}
    }
    Pour eviter le cas ou la classe fille n'appèle pas le code du parent
    Oui, c'est ce que j'ai posté ci-dessus mais l'idée ne lui plait pas trop
    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.

  13. #13
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    bon ba au final c'est niquel, mais j'avais pas bien saisis le code de dinobogan, donc ba merci à tous, maintenant tout fonctionne comme il faut

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

Discussions similaires

  1. Surcharge d'une méthode
    Par Pilloutou dans le forum C#
    Réponses: 8
    Dernier message: 10/10/2007, 14h53
  2. Réponses: 2
    Dernier message: 10/05/2007, 17h29
  3. [Débutant] Surcharge d'une méthode
    Par HaTnuX dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2007, 19h27
  4. Réponses: 20
    Dernier message: 19/09/2006, 20h52
  5. [MFC] Surcharge d'une méthode CListCtrl
    Par semenzato dans le forum MFC
    Réponses: 8
    Dernier message: 22/12/2005, 22h05

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