Jetzt anmelden...

Name
Passwort
Registrieren

Java Tutorial #25

Die toString() Methode in Java überschreiben

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.

Kommentare [0]

Stefan 02.01.2019

Infos zum Artikel

Kategorie Java
Autor Stefan
Datum 02.01.2019

Thema in Kurzform

  • Alle Java-Objekte verfügen über die toString()-Methode, da sie von Object vererbt wird.
  • toString() liefert eine eindeutige Kennung eines Objekts in Form eines Strings zurück.
  • Für eine nachvollziehbare und selbst erklärende Kennung sollten wir toString() in unseren Klassen überschreiben.

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. Pakatname).
  • @-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).

Übungen

einfach

Wozu nutzt die toString()-Methode?

Lösung ein-/ausblenden

mittel

Was ist das Ergebnis nach folgenden beiden Codes?

package paket1;

public class Castle {

    private String name;
    private int built;
    private String location;

    public Castle(String name, int built, String location){
        this.name = name;
        this.built = built;
        this.location = location;
    }

    @Override
    public String tostring(){
        return getClass().getSimpleName() + "[" + name + ", " +  built + ", " + location +"]";
    }

}
package paket1;

public class Engage {

    public static void main(String[] args){

        System.out.println(new Castle("Bodiam Castle", 1392, "East Sussex"));
    }
}

A. Compiler-Fehler: Das Castle-Objekt hat keine Referenzvariable.
B. Compiler-Fehler, da toString() nicht überschrieben wird.
C. Castle[Bodiam Castle, 1392, East Sussex]
D. paket1.Castle@2503dbd3
E. Es wird nichts auf der Konsole angezeigt, da nirgendwo die toString()-Methode aufdgerufen wird.

Lösung ein-/ausblenden

schwer

Überschreiben Sie für folgende Klasse die toString()-Methode sinnvoll:

package paket1;

public class Kingdom {

    private String name;
    private String ruler;
    protected int population;

    public Kingdom(String n, String r, int a){
        name = n;
        ruler = r;
        age = a;
    }

    public static void main(String[] args){

    }
}

Erstellen Sie danach in der Main-Mathode ein Objekt der Klasse Kingdom mit folgenden Parameter-Werten: "Winterfell", "Stark", 80000

Rufen Sie nun auf diesem Objekt die toString()-Methode auf und speichern Sie den Rückgabe-String gesplittet in einem Array von Strings.

Schreiben Sie jetzt eine if-else-Abfrage und prüfen Sie den Wert der Array-Position, in der die Population gespeichert ist: Wenn die Population größer ist als 0, soll folgender Text auf der Konsole anmgezeigt werden: There is someone in Winterfell.

Andernfalls sind alle Einwohner wohl tot und es soll folgender Text auf der Konsole geprinted sein: There is no one living in Winterfell.

Kleiner Tipp: Sie brauchen für die Lösung dieser Aufgabe jeweils eine Methode der Klassen String und Integer.

Lösung ein-/ausblenden

Kommentar schreiben

Nur angemeldete Benutzer können kommentieren.
Ich habe ein Konto
Kostenlos registrieren

Alle Kommentare

Es gibt bislang noch keine Kommentare zu diesem Thema.

Initializer

Eher selten aber praktisch!

Statische Elemente

Statische Variablen und Methoden nutzen

Pass-by-value in Java

wie genau der Vorgang der Parameterübergabe bei Methoden abläuft, klären wir hier.

FALCONBYTE.NET

Handmade with 🖤️

© 2018, 2019 Stefan E. Heller

Impressum | Datenschutz

facebook programmieren lernen twitter programmieren lernen youtube programmieren lernen