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 ) Methode. 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 );
  }

  . . . . .
}
Inhaltsverzeichnis