Thema in Kurzform
Die Klasse Java.lang.Object stellt eine Methode namens toString() zur Verfügung, die beim Aufruf eine String-Repräsentation des aktuellen Objekts zurückliefert. Wie genau wir mit der toString() Methode umgehen, zeigen wir hier.
Die String-Repräsentation des Objekts, die beim Aufruf der toString()-Methode standardmäßig zurückgeliefert wird, ist eine Zusammensetzung aus folgenden Teilen:
toString() ist in der Klasse Object implementiert; der Methodencode sieht so aus:
public String toString(){
getClass().getName() + '@' + Integer.toHexString(hashCode());
}
Testen wir das doch mal mit einem Objekt der Klasse Falke:
package paket1;
public class Falke {
private String name;
private int alter;
public Falke(String name, int alter){
this.name = name;
this.alter = alter;
}
public static void main(String[] args){
Falke falke = new Falke("Bruce", 7); // Objekt erzeugen
System.out.println(falke.toString()); //toString() auf Objekt aufrufen
}
}
Nachdem wir ein neues Objekt der Klasse Falke erstellt haben, rufen wir darauf die toString()-Methode auf und erhalten folgenden etwas kryptischen Rückgabewert auf der Konsole angezeigt:
paket1.Falke@2503dbd3
Merke: Bei System.out.println() muss die toString()-Methode übrigens nicht explizit aufgerufen werden: Die Nennung der Objektvariablen genügt (es wird dann automatisch toString() aufgerufen):
System.out.println(falke); // paket1.Falke@2503dbd3
Für eine angepasste String-Kennung sollten wir toString() in den Unterklassen überschreiben. Der Rückgabewert sollte dann den Namen der Klasse und einzelne oder alle Zustände des Objekts zurückliefern.
Für unsere Beispielklasse Falke sähe ein sinnvolles Überschreiben der Methode zum Beispiel so aus:
@Override
public String toString(){
return getClass().getSimpleName() + "[" + name + ", " + alter + "]";
}
Erstellen wir also nun ein neues Falke-Objekt und rufen darauf die toString()-Methode aus, erhalten wir folgenden Konsolenprint:
Falke[Bruce, 7]
Einzelne Objekte sind jetzt einfacher zu identifizieren.
Beim Überschreiben von toString() haben wir die Annotation @Override der Methodensignatur vorangestellt. Diese Anmerkung ist freiwillig, gehört aber zum guten Stil und bietet zwei Vorteile:
Java Basics
[Java einrichten] [Variablen] [Primitive Datentypen] [Operatoren] [if else] [switch-case] [Arrays] [Schleifen]
Objektorientierung
[Einstieg] [Variablen ] [Konstruktor] [Methoden] [Rekursion] [Statische Member] [Initializer] [Pass-by-value] [Objektsammlungen] [Objektinteraktion] [Objekte löschen]
Klassenbibliothek
[Allgemeines] [String ] [Math] [Wrapper] [Scanner] [java.util.Arrays] [Date-Time-API]
Vererbung
[Einstieg Vererbung] [Konstruktoren bei Vererbung ] [Der protected Zugriffsmodifikator] [Abstrakte Klassen und Methoden] [Polymorphie in Java] [Typumwandlung] [Die Klasse Object] [Die toString()-Methode] [Objekte vergleichen] [Was ist ein Interface?]