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 :

Surcharger une méthode


Sujet :

Langage Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Surcharger une méthode
    Bonjour tout le monde.
    J'ai un petit souci sur un projet que je dois rendre au plus vite:

    donc voila ici j'ai un code qui dessine des Edges dans une classe Edge:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    protected Edge startEdge(Vertex v) {
    		RectangularShape rs2 = newVertexShape(0, 0);
    		RectangularShape rs = v.shape;
    		rs2.setFrameFromCenter((int) rs.getCenterX(), (int) rs.getCenterY(),
    				(int) rs.getCenterX(), (int) rs.getCenterY());
    		Edge l = new Edge(v, new Vertex(rs2, null));
    		edges.add(l);
     
    		return l;
    }
    j'ai une autre classe EdgeTransiton qui hérite de Edge et qui implémente une interface Transition:

    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
    25
    26
    27
    public class EdgeTransition extends Edge implements Transition<Object>{
     
    		Object label;
    		State source;
    		State target;
     
    		EdgeTransition(Vertex v1, Vertex v2, Object lb, State src, State tgt) {
    			super(v1, v2);
    			this.source = src;
    			this.target = tgt;
    			this.label = lb;
     
    		}
     
    		public Object label() {
    			return this.label;
    		}
     
    		public State source() {
    			return this.source;
    		}
     
    		public State target() {
    			return this.target;
    		}
     
    	}
    Mon problème c'est que je voudrai redéfinir la méthode startEdge(Vertex v) dans la classe fille pour que à la place il me dessine des EdgeTransition.

    Quelqu'un pourrait il m'indiquer la marche a suivre,
    Merci d'avance.

  2. #2
    Membre habitué Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Bonjour,

    Pardon, mais où est ton problème? Faire dessiner un "EdgeTransition" ou ne pas savoir surcharger une méthode ?
    Dans la vie, il y a trois sortes de mathématiciens : ceux qui savent compter et ceux qui ne savent pas...

    Ne jamais jouer à saute-moutons avec une licorne...

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    ben en fait j'arrive pas a voir comment surcharger la méthode pour que lorsque j'appelle startEdge il me prenne en compte un EdgeTransition au lieu d'un edge



  4. #4
    Membre habitué Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Tu as parlé simultanément de surcharge (=surdéfinition) et de redéfinition, il faut bien distinguer ces deux notions.

    Ici, ta valeur de retour ne sera plus un "Edge" mais "EdgeTransition" (si j'ai bien saisi...), la valeur de retour de ta méthode n'est alors plus la même. On parle alors de surdéfinition(=surcharge) et ceci n'est absolument pas lié à l'héritage.

    Tu peux donc surdéfinir ta méthode dans la classe fille en mettant en gros ce que tu as mis dans la classe mère, sauf que tu retournes non pas un "Edge" mais un "EdgeTransition".

    Dit autrement, tu devrais utiliser la redéfinition dans la classe fille si tu avais même signature, même nom et même valeur de retour, ce qui n'est pas le cas ici. Ici, en fait, il se passe un cas analogue à l'addition "+" qui est surdéfinie pour les int et pour les float i.e a+b existe lorsque a,b sont des entiers et a+b existe lorsque a,b sont des flottants (à la différence que int et float sont des types primitifs et non des objets...).

    Je ne sais pas si ça répond à ta question...
    Dans la vie, il y a trois sortes de mathématiciens : ceux qui savent compter et ceux qui ne savent pas...

    Ne jamais jouer à saute-moutons avec une licorne...

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    si je fait cette surcharge je devrai aussi modifier cette methode alors :
    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
    public void mousePressed(MouseEvent e) {
    		requestFocusInWindow();
    		if ((e.getModifiersEx() & InputEvent.BUTTON3_DOWN_MASK) == InputEvent.BUTTON3_DOWN_MASK)
    			return;
    		int x = e.getX();
    		int y = e.getY();
    		Vertex v = getVertex(x, y);
    		if (v == null) {
    			currentJointPoint = getJointPoint(x, y);
    		}
    		if (v == null && currentJointPoint == null)
    			v = createVertex(x, y);
    		if (v != null && e.isAltDown())
    			currentEdge = startEdge(v);
    		else
    			currentVertex = v;
    		repaint();
    	}
    qui appelle starEdge et qui initialise curentEdge dans la classe mère (currentEdge étant un Edge).
    Ou il faudra que je déclare une autre variable currentEdgeState par exemple?

  6. #6
    Membre habitué Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Le mieux je pense, serait que tu détailles non pas ton code mais les classes et les méthodes que tu utilises en précisant les liens de parenté, à quelle classe appartiennent les méthodes, ce que font tes méthodes etc...car là, je n'ai pas de vision globale et je vais avoir franchement du mal à saisir ton problème dans son ensemble...Déjà que ça n'est pas sur que j'y arrive si je le vois dans son ensemble...
    Dans la vie, il y a trois sortes de mathématiciens : ceux qui savent compter et ceux qui ne savent pas...

    Ne jamais jouer à saute-moutons avec une licorne...

  7. #7
    Membre habitué Avatar de BlackWood
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Points : 169
    Points
    169
    Par défaut
    Comme titourock, j'ai du mal à saisir...
    Quel est le problème ? Un EdgeTransition est de toute façon un Edge avant tout, donc pourquoi modifier ton mousePressed ?
    BlackWood
    Et comme apparemment, ça fait "class" dans une signature :
    , , , ,

Discussions similaires

  1. Surcharger une méthode dans une dll.
    Par Slashyguigui dans le forum C#
    Réponses: 5
    Dernier message: 22/09/2011, 10h15
  2. Surcharger une méthode clone()
    Par alex2746 dans le forum Débuter avec Java
    Réponses: 23
    Dernier message: 12/10/2009, 12h02
  3. [Doctrine] Surcharger une méthode gérée par __call()
    Par Chekov dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/09/2009, 00h12
  4. "Dé-surcharger" une méthode native javascript
    Par Takezo1584 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/08/2007, 13h37
  5. [Custom Tags] Problème avec une surcharge de méthode
    Par Strab dans le forum Taglibs
    Réponses: 19
    Dernier message: 26/08/2005, 17h34

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