Héritage de méthodes

aspyduk -  
 swed -
Bonjour,

J'ai quelques soucis d'héritage en java.
J'ai une class joueur qui contient des informations sur chaque joueur (nom, prenom, date de naissance, etc.).
Je redéfinis la méthode héritée equals pour qu'elle ne prenne en compte uniquement le nom, le prénom et la date de naissance lors de la comparaison de deux joueurs (objets).

public class joueur {

String nom
String prenom
String date

public boolean equals (joueur j) {

return this.nom.equals(j.nom) && this.prenom.equals(j.prenom) && this.date.equals(j.date),
}

Jusque là tout fonctionne.
Maitenant, j'utilise un HashSet pour manipuler des groupes de joueurs.
HashSet<joueur> groupe = new HashSet<joueur>();
groupe.add(joueur1);
groupe.add(joueur2);
...
En théorie, si un joueur3 possède les mêmes nom, prenom et date de naissance qu'un des joueurs du groupe, groupe.add() qui vérifie la présence du nouveau joueur dans groupe avant l'ajout par contains() ne devrait pas ajouter ce joueur car contains() fait appel à o.equals() qui devrait donc être joueur.equals().

Or le joueur3 est malgré tout ajouté au groupe!
Est-ce que j'ai raté quelque chose ?

1 réponse

swed
 
Bonjour,

Je pense qu'il faut redéfinir equals(Object), et non equals(Joueur) !!
Et donc biensûr penser à tester le type de l'objet avec instanceof, avant de le transtyper :

public boolean equals (Object obj)
{
if ( obj instanceof joueur )
{
joueur comparaison=(joueur)(obj);
return this.nom.equals(comparaison.nom) && this.prenom.equals(comparaison.prenom) && this.date.equals(comparaison.date);
}
else
return false;
}

(j'ai pas testé le code, y'a ptetre des erreurs)

Pour être propre ; nom, prenom, et date devraient être des membres privés.

Cordialement,
M.
0