Eine gute Antwort wäre:
Name: Amy Nummer: 123-4567
Die equals( Object ) Methode
class Eintrag
{
String name;
String nummer;
. . . . .
// Methoden
public boolean equals( Object anderes )
{
return name.equals( ((Eintrag)anderes).name );
}
. . . . .
}
|
Studieren Sie sorgfältig die equals( Object )
Der Grund des Telefonbuch-Beispiels ist die Erörterung dieser Methode.
Diese Methode zeigt ein allgemeines Problem auf (bei der Verwendung
einer Referenz auf Object) und
verwendet eine typische Lösung (eine Typumwandlung in einen spezifischen Typ.)
Alle Klassen haben eine equals( Object ) Methode,
da die Object-Klasse sie definiert.
(Vielleicht möchten Sie an dieser Stelle einen Blick in die Java Dokumentation für Object werfen.)
Die meisten Klassen überschreiben diese Methode mit einer geeigneteren Methode.
Die Parameterliste ist ( Object anderes ).
Das besagt, dass equals() mit einer Referenz
auf ein anderes Object verwendet wird.
Aber, in unserer speziellen Applikation werden wir zwei
Eintrag-Objekte miteinander vergleichen.
(Ein Eintrag wird den Namen enthalten, den wir suchen;
der andere wird ein Eintrag in einem Vector von Daten sein.)
Wir wissen was der Parameter sein wird (da wir den Code schreiben),
aber der Compiler weiss es nicht.
Ohne genauere Information wird der Compiler nur von den Methoden und Elementen von
Object ausgehen.
Um dem Compiler mitzuteilen was wir erwarten,
muss eine Typumwandlung verwendet werden:
return name.equals( ((Eintrag)anderes).name );
Das sagt dem Compiler, dass ein anderes eine Referenz auf einen Eintrag ist.
Das muss getan werden, um auf das Feld name eines Eintrag-Objekts zuzugreifen.
Sie mögen sich fragen: Warum nicht eine equals() Methode auf diese Weise schreiben:
public boolean equals( Eintrag anderes )
{
return name.equals( anderes.name );
}
Das ist eine korrekte Methode, aber sie überschreibt nicht
die equals( Object ) Methode, die alle Objekte haben.
Es ist diese zuletzt genannte Methode, die mit der
indexOf() Methode verwendet wird.
Wir müssen sie überschreiben, um die eingebaute Suchmethode
von Vector nutzen zu können.
FRAGE 21:
Was wird der Compiler mit der folgenden Methode tun:
class Eintrag
{
. . . . .
// Methoden
public boolean equals( Object anderes )
{
return name.equals( anderes.name );
}
. . . . .
}
