Mit program, som løser problemet, er følgende: Her er et link til programmet.Bemærk for det første, at vi vælger at lade other være at typen Object, og ikke Konto.
Herved opnår vi at equals virkelig 'overrider' equals fra Object. Hvis vi valgte definitionen: Det skal også bemærkes at på trods af at både instansvariablene navn og saldo er private,
så kan vi i equal se other's private instansvariable. Årsagen er, at det private relaterer
sig til klassen - ikke de individuelle objekter. En privat egenskab i et objekt af klassen Konto
kan altså ses fra alle andre Konto objekter. Vi kunne også overveje at aflæse egenskaberne i den anden konto, other, via
de offentlige metoder i klientgrænsefladen. Det har vi dog ikke gjort i vores
implementation. Bemærk også at vi returnerer false hvis other ikke er en Konto. Den generelle type af
other tillader os f.eks. at afvise lighed mellem en Konto og et String objekt.class Konto {
private double rentesats;
private String navn;
private double saldo;
public Konto(String ejer) {
rentesats = 0.02;
navn = ejer;
saldo = 0;
}
public double balance () {
return saldo;
}
public void hæv (double beløb) {
saldo = saldo - beløb;
}
public void indsæt (double beløb) {
saldo = saldo + beløb;
}
public void tilskrivRente() {
saldo = saldo + saldo * rentesats;
}
public boolean equals(Object other){
if (other instanceof Konto){
String thisLcNavn = navn.toLowerCase();
String otherLcNavn = ((Konto)other).navn.toLowerCase();
return
this.saldo == ((Konto)other).saldo &&
thisLcNavn.equals(otherLcNavn);
}
else return false;
}
public String toString() {
return navn + "'s konto indeholder "
+ saldo + " kroner";
}
} // End Konto
class BankEquals {
public static void main( String[] args ) {
Konto konto1 = new Konto("PETER");
Konto konto2 = new Konto("Peter" );
String str = "Mogens";
konto1.indsæt(100);
konto2.indsæt(101);
System.out.println(konto1); System.out.println(konto2);
if (konto1.equals(konto2))
System.out.println("Konto1 og konto2 er ens");
else
System.out.println("Konto1 og konto2 er forskellige");
if (konto1.equals(str))
System.out.println("Her er vist noget galt...");
else
System.out.println("En konto og en streng kan aldrig være lig med hinanden");
}
}
public boolean equals(Konto other){ ... }
ville der være tale om en ny definition løsrevet fra metoden i Object.