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 :

[Héritage] Redéfinition méthode


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 14
    Points : 15
    Points
    15
    Par défaut [Héritage] Redéfinition méthode
    Bonjour,

    Ma classe hérite de GregorianCalendar.

    Je surcharge la méthode add(int, int) par cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void add(int field, int value) {
    	Calendar gc = (Calendar) clone();
    	gc.add(field, value);
    	valider( gc, true );				
    }
    Avec une telle surcharge, j'obtiens "java.lang.StackOverflowError".

    Je souhaiterai donc pouvoir appellé la méthode add(int, int) non surchargé (celle de Calendar).

    J'ai pu lire (ici) que l'on pouvait faire : monInstance.super.maMethode (); mais ca marche pas où c'est moi qui m'y prend mal ;o)

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Tu fais super.add(int, int) ...

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par thibaut
    Tu fais super.add(int, int) ...
    Ca va modifier l'instance qui appelle la méthode, mais pas mon gc.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 68
    Points : 72
    Points
    72
    Par défaut
    Tu ne peux pas le faire. Je ne peux pas de donner de solution, car je ne comprends pas ce que tu veux faire avec ton code : après valider, la variable gc est perdue, semble-t-il, donc je ne vois pas pourquoi tu la mets en oeuvre.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Elle est certes perdu après valider, mais je l'utilise pour une affectation apres plusieurs test dans valider.

    Ce que je souhaite ,c'est pouvoir appeller la methode add original et non celle que j'ai declaré.

  6. #6
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    1er point: si ton add n'est pas un remplacement du add de ta super classe alors pourquoi l'appeler add et non pas monAdd ou ce que tu voudras..

    2eme point: le peu de code que tu as montres me parait bien fumeux l'integralite de la methode serait un plus pour notre comprehension et les reponses que l'on pourrait t'apporter ...

    3eme point: il n'est pas possible depuis l'exterieur d'un objet d'appeler des methodes de la classe mere de cet objet, il va falloir que tu trouves autre chose ...

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    J'opte pour le 3e point alors ;o)

    En ce qui concerne le 1er point, il est vrai que ma méthode add ne remplace pas exactement celle de la super classe ... mais je ne veux pas que l'utilisateur puisse utiliser le add de la super classe car il me faut verifier ce que l'utlisateur veut ajouter.

    Il y a peut etre une autre facon de masquer le add de la super classe. Dans mon cas, je crois que si add de la super classe avait été protected, cela m'aurait arrangé (mais j'ai pas le choix).

    Mais il est fort possible que mon problème ne proviennent pas d'ici. lol

    Quand je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public void add(int field, int value) {
     
    		Calendar gc = Calendar.getInstance();
    		gc.setTime(this.getTime());
    		gc.add(field, value);
    		valider( gc, true );				
     
    	}
    Avec ce code mon gc a pour class java.util.GregorianCalendar tandis qu'avec ma première j'obtenais une objet de type MyGregorianCalendar.

    Avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //this est une objet MyGregorianCalendar
    GregorianCalendar gc =  (GregorianCalendar) this.clone();
    J'obtiens un objet du meme type que mon this alors qu'il me semblait logique d'obtenir un objet du type GregorianCalendar

  8. #8
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Ce que tu peux faire, c'est ne pas herite de GregorianCalendar mais simplement en utiliser un..

    Ta classe contient un GregorianCalendar et ne propose dans son interface que les methodes que tu veux..

    Les methodes utilisent le GregorianCalendar interne ..

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  9. #9
    vux
    vux est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 26
    Points : 34
    Points
    34
    Par défaut
    Salut,
    petit commentaire sur ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       public void add(int field, int value) { 
     
          Calendar gc = Calendar.getInstance(); 
          gc.setTime(this.getTime()); 
          gc.add(field, value); 
          valider( gc, true );             
     
       }
    Il me semble que tu fait un appel recursif sans sortie (d'ou le stack overflow qui en est la punition logique ).

    Explication:
    1)Tu appelles add()
    2)Tu recuperes ton instance
    3)Tu appelles add avec ton instance d'ou retour au 1 (tu fait donc ces etapes indefiniment).

    voilà
    @+
    vux

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par bulbo
    Ce que tu peux faire, c'est ne pas herite de GregorianCalendar mais simplement en utiliser un..

    Ta classe contient un GregorianCalendar et ne propose dans son interface que les methodes que tu veux..

    Les methodes utilisent le GregorianCalendar interne ..

    Bulbo :wink:
    Merci, j'ai opté pour cette solution, c'est moins casse pied ;o)

    J'y avais pas pensé :o)

    Merci à tous

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/07/2009, 22h18
  2. Héritage de méthodes
    Par lvr dans le forum Langage
    Réponses: 12
    Dernier message: 12/09/2007, 10h20
  3. héritage et méthode abstraite
    Par troussepoil dans le forum C++
    Réponses: 13
    Dernier message: 30/03/2007, 10h51
  4. Exceptions, héritage et méthodes virtuelles
    Par Nuwanda dans le forum C++
    Réponses: 13
    Dernier message: 23/05/2006, 13h06
  5. Réponses: 8
    Dernier message: 04/06/2004, 10h13

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