toString() in einer Klasse überschreiben
Alle Klassen erben in Java letztlich die in java.lang.Object implementierten Methoden. Dies führt u.a. dazu, dass ein Objekt als Parameter einer der PrintStream-Methoden print() oder println() ausgegeben werden kann, da bei Übergabe die Methode toString() implizit aufgerufen wird.
System.out.println(myObject); // myObject@b815859
Die etwas kryptische Ausgabe resultiert daraus, dass diese der Routine
getClass().getName() + "@" + Integer.toHexString(hashCode());
entspringt. Das heißt somit, dass die PrintStream-Ausgabe
eines Objektes per print() oder println()
lediglich aus dessen Namen (mit Package-Angabe) und dessen
Hash-Repräsentation getrennt durch ein '@' besteht.
Dies
lässt sich durch Überschreiben in eine persönlich
nützlichere Form ändern:
public class ToStringUeberschreiben {
private String s = "Hallo Welt!";
private int i = 10;
public static final double pi = 3.14;
public static void main(String[] args) {
System.out.println(new ToStringUeberschreiben());
}
public String toString(){
return this.s + " | " + this.i + " | " + pi;
}
}
Hier wird die Methode toString() neu implementiert, indem
eine Ausgabe der Members der Klasse ToStringUeberschreiben
eingerichtet wird. Die Ausführung des Programms ergibt hier:
Hallo Welt! | 10 | 3.14
Die Tatsache, dass die Methode toString()
während
der Ausgabe durch println()
nicht explizit aufgerufen
wird zeigt, dass dies als Standard-Routine im Hintergrund geschieht.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.