Java Tutorial #34

Die toString() Methode in Java überschreiben

2019-01-02 | credit: ©monsitj

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.

toString() Standardverhalten

Die String-Repräsentation des Objekts, die beim Aufruf der toString()-Methode standardmäßig zurückgeliefert wird, ist eine Zusammensetzung aus folgenden Teilen:

  • Vollständiger Klassenname (inkl. Paketname).
  • @-Zeichen
  • Adresse des Objekts im Hauptspeicher in hexadezimaler Notation

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

toString() überschreiben

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.

@Override

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:

  • Besserer Lesbarkeit des Codes.
  • Der Compiler prüft, ob tatsächlich eine Methode aus einer Oberklasse überschrieben wird. Ist die Methodensignatur nicht identisch mit einer Methode aus einer Superklasse (d.h. es würde eine neue Methode hinzugefügt oder eine Methode überladen), erhalten wir praktischerweise eine Compiler-Meldung (etwa: Method does not override method from its superclass).
Werbung

Java lernen

Werde zum Java Profi!

PHP Lernen

Lerne serverbasierte Programmierung

JavaScript lernen

Skille dein Webcoding

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2023 Stefan E. Heller

Impressum | Datenschutz | Changelog

Falconbyte Youtube Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen