Des comptes en banque comparables
On va reprendre ici la classe Compte vu
précédemment pour faire en sorte que deux comptes
en banque soient comparables ; on décide que deux comptes
sont égaux s'ils ont le même montant et que l'un
est plus grand que l'autre si son montant est strictement plus grand
que celui de l'autre.
package banque;
import utilitaires.Comparable;
public class Compte implements Comparable {
private int montant;
private int numero;
private String proprietaire;
... (Le code de l'ancienne classe Compte)
// On compare les comptes selon leurs montants
public int comparerA(Object o) {
Compte autre = (Compte) o;
if (this.montant < autre.montant) return -1;
if (this.montant > autre.montant) return 1;
return 0;
}
}
Remarque : dans le code de la méthode comparerA,
il ne faut pas être surpris de l'absence de else
; en effet, si les conditions des if
sont vérifiées, la méthode se termine
et on ne passe donc pas alors à l'instruction suivante.
Le fichier
Compte.java
import
utilitaires.Comparable; : il est utile d'utiliser
cet import pour utiliser le nom court de
l'interface Comparable, puisque cet interface a
été mise dans le paquetage de nom utilitaires
; sinon, il faudrait nommer plus bas l'interface par son nom long : utilitaires.Comparable.
public
class Compte implements Comparable : on
déclare ainsi que la classe Compte
implémente l'interface Comparable ;
cela entraîne qu'elle dispose des constantes de l'interface
(même si, ici, il n'y en a pas) et qu'elle doit
définir (on dit aussi implémenter) dans son code
la méthode compareTo
prototypée dans l'interface Comparable
; c'est ce qui est fait ici.
Compte
autre = (Compte) o; : pour comparer les montants
des comptes en banque, il est nécessaire d'utiliser l'attribut montant de o
; ceci n'est possible qu'en faisant ce qui s'appelle une conversion de
type (ou conversion de classe); on affirme en quelque sorte que o
est de type Compte et on met le
résultat dans la variable autre
définie comme étant de type Compte.
Si jamais l'objet reçu en paramètre
n'était pas un Compte, on aurait ce
qui s'appelle un lancement d'exception, avec un lancement d'une
exception de type ClassCastException (voir le
chapitre sur les exceptions).
© Irène
CharonTélécom ParisTech 2012