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 :

[Debutant] Redefinir une méthode


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut [Debutant] Redefinir une méthode
    Bonsoir à tous,

    Ma question est simple : dans une classe, j'ai besoin de redéfinir la méthode equals(Object o).
    Quelle est la syntaxe à respecter?
    Car pour l'instant, mon prog utilise le equals de la classe OBJECT et non celui que j'ai programmé.

    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Je vais vous mettre du code.

    Voici ma fonction rechercher(Object c)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public int rechercher(Object c){
    	int i=0;
    	while(i<nbElement){
    	    if ((tab[i]!=null) &&(tab[i].cle.equals(c))){
    		break;
    	    }
    	    else{
    		i++;
    	    }
    	}
    	return i;
        }
    }
    QQs explications : dans mon tableau tab, j'ai des objets de type VALEUR[cle, propriete]. Chaque objet VALEUR a une cle de type POS et une propriete de type string.
    Ainsi, j'aimerai changer la méthode de comparaisons de deux éléments de type POS.

    Dans ma classe POS, voici ce que j'ai écris

    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
     
    public class Pos {
    	int lig;
    	int col;
     
    	public Position(int l,int c){
    	    lig=l;
    	    col=c; 
    	}
     
     
    public boolean equals(Pos p) {
    		if((lig==p.lig)&&(col==p.col)){
    			return true;	
    		}
    		else{
    			return true;
    		}
     
     
     
    	}
    }

    Merci d'avance de votre aide.

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Points : 194
    Points
    194
    Par défaut
    Salut,

    Tu as implemente une methode equals qui prend en argument un Pos et tu l'appelles avec un Object.
    Forcement, a l'execution, le prog utilise la methode Et si ajoutes un cast dans l'appel a la methode ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[i].cle.equals((Pos) c)
    Ca change quelque chose ?

    sylvain_2020

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Le compilateur se débrouille pour appeler la méthode correspondante...
    Comme tu passe un Objet ( c ) à equals() c'est la méthode equals() hérité de Object qui est appellé puisque la tienne neccessite un Pos...

    Donc il faut soit que tu lui passe un Pos soit que tu surcharge la méthode equals de Object (meilleure solution surtout si tu souhaites utiliser tes objets avec les Collections Java) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public boolean equals(Object o) {
     
    	if ( o instanceof Pos ) {
    		Pos p = (Pos) p;
    		if((lig==p.lig)&&(col==p.col))
    			return true; 
    	}
    	return false;
    }
    PS: dans le code que tu as donné la méthode equals() retournait toujours true mais je pense que ca doit être un mauvais copier/coller...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Merci de votre aide.
    Ca marche mieux maintenant.
    Par contre, quelle est extactement la signification de la ligne de code suivante, même si je la devine : (comment interprete la parenthese par exemple)

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    C'est un cast !!!

    Cela signifie que l'on "change" le type de o de Object en Pos.
    Cela ne peut marcher que si o est bien de type Pos, ce que l'on vérifie avec le instanceof...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 149
    Points : 93
    Points
    93
    Par défaut
    Ok, merci.

  8. #8
    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
    C'est un cast !!!

    Cela signifie que l'on "change" le type de o de Object en Pos.
    Cela ne peut marcher que si o est bien de type Pos, ce que l'on vérifie avec le instanceof...
    C'est pas tout à fait ça:

    Quand on fait un cast on ne change pas le type de l'objet. Un objet Pos qu'il soit vu comme Object ou Pos c'est toujours fondamentalement un objet de type Pos: pour preuve quand tu fais un getClass() sur o ça te renvoie Pos de même pour le instanceof.

    Par contre effectivement quand tu vois un object de type Pos comme une sous-classe (et notamment Object) tu masques un certain nombre de propriétés propres à Pos seulement...

    A+

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

Discussions similaires

  1. [Debutant] Ecrire une méthode
    Par wxwally dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 18/02/2008, 20h04
  2. [debutant]pb de return dans une méthode
    Par flora806 dans le forum Langage
    Réponses: 25
    Dernier message: 02/11/2007, 16h02
  3. [debutant]Comment chercher une méthode
    Par artotal dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 11/10/2007, 14h34
  4. Debut d'une application ? Méthodes ?
    Par Mathelec dans le forum Windows
    Réponses: 25
    Dernier message: 22/04/2006, 20h44
  5. [Debutant]périodiser une méthode
    Par niark-niark dans le forum Langage
    Réponses: 4
    Dernier message: 31/01/2006, 14h53

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