Menu
Coddy logo textTech

Die Object-Klasse

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 24 von 87.

In Java erbt jede Klasse, die Sie erstellen, automatisch von einer speziellen Klasse namens Object. Selbst wenn Sie nirgendwo extends schreiben, ist Ihre Klasse immer noch eine Unterklasse von Object. Dies macht Object zur Wurzel der gesamten Klassenhierarchie.

public class Person {
    // Dies erweitert implizit Object
}

// Ist äquivalent zu:
public class Person extends Object {
}

Da jede Klasse von Object erbt, hat jedes Objekt in Java Zugriff auf mehrere integrierte Methoden. Zu den am häufigsten verwendeten gehören:

MethodeZweck
toString()Gibt eine String-Repräsentation des Objekts zurück
equals(Object obj)Vergleicht zwei Objekte auf Gleichheit
hashCode()Gibt einen Hashcode-Wert für das Objekt zurück
getClass()Gibt die Laufzeitklasse des Objekts zurück

Standardmäßig verfügen diese Methoden über generische Implementierungen. Zum Beispiel gibt toString() den Klassennamen gefolgt von der Speicheradresse des Objekts zurück, was nicht besonders nützlich ist:

Person p = new Person();
System.out.println(p.toString());  // Ausgabe: Person@1a2b3c4d

Aus diesem Grund werden Sie diese Methoden in Ihren eigenen Klassen häufig überschreiben, um ein aussagekräftiges Verhalten bereitzustellen. Das Verständnis, dass Object die universelle Elternklasse ist, hilft zu erklären, warum Sie jedes Objekt in einer Object-Variablen speichern können und warum bestimmte Methoden für jedes von Ihnen erstellte Objekt verfügbar sind.

challenge icon

Aufgabe

Einfach

Lassen Sie uns untersuchen, wie die Klasse Object als universelle Elternklasse aller Java-Klassen dient, indem wir ein einfaches Gadget-Inventarsystem erstellen, das die von Object geerbten Methoden demonstriert.

Sie werden drei Dateien erstellen, um Ihren Code zu organisieren:

  • Gadget.java: Erstellen Sie eine Klasse, die ein elektronisches Gadget repräsentiert. Ihre Klasse sollte Folgendes enthalten:
    • Private Felder für name (String) und year (int)
    • Einen Konstruktor, der beide Felder initialisiert
    • Getter-Methoden getName() und getYear()
    Überschreiben Sie keine Methoden von Object – wir möchten zuerst das Standardverhalten sehen.
  • Smartphone.java: Erstellen Sie eine Unterklasse, die Gadget erweitert und smartphone-spezifische Funktionen hinzufügt:
    • Ein privates Feld für brand (String)
    • Einen Konstruktor, der name, year und brand entgegennimmt – verwenden Sie super(name, year) für den Elternteil
    • Eine Methode getBrand(), die die Marke zurückgibt
    • Überschreiben Sie die Methode toString(), um Folgendes zurückzugeben: Smartphone: [brand] [name] ([year])
  • Main.java: Demonstrieren Sie den Unterschied zwischen Standard- und überschriebenen Object-Methoden. Sie erhalten drei Eingaben: einen Gadget-Namen, ein Jahr und eine Marke. Erstellen Sie sowohl ein Gadget als auch ein Smartphone mit demselben Namen und Jahr (plus Marke für das Smartphone) und führen Sie dann Folgendes aus:
    • Geben Sie den Klassennamen des Gadgets mit getClass().getSimpleName() aus
    • Geben Sie aus, ob die Standard-Methode toString() des Gadgets das "@"-Symbol enthält (geben Sie true oder false aus)
    • Geben Sie das Smartphone mit seiner überschriebenen Methode toString() aus

Sie erhalten drei Eingaben: den Gadget/Smartphone-Namen (String), das Jahr (int) und die Marke (String).

Diese Herausforderung zeigt, warum das Überschreiben von Object-Methoden wichtig ist – das standardmäßige toString() liefert Ihnen etwas wie Gadget@1a2b3c, während Ihre benutzerdefinierte Version aussagekräftige Informationen liefert!

Spickzettel

In Java erbt jede Klasse automatisch von der Klasse Object, was sie zur Wurzel der gesamten Klassenhierarchie macht:

public class Person {
    // Dies erweitert implizit Object
}

// Ist äquivalent zu:
public class Person extends Object {
}

Jedes Objekt in Java hat Zugriff auf mehrere integrierte Methoden, die von Object geerbt wurden:

MethodeZweck
toString()Gibt eine String-Repräsentation des Objekts zurück
equals(Object obj)Vergleicht zwei Objekte auf Gleichheit
hashCode()Gibt einen Hashcode-Wert für das Objekt zurück
getClass()Gibt die Laufzeitklasse des Objekts zurück

Standardmäßig gibt toString() den Klassennamen gefolgt von der Speicheradresse des Objekts zurück:

Person p = new Person();
System.out.println(p.toString());  // Ausgabe: Person@1a2b3c4d

Sie können diese Methoden in Ihren eigenen Klassen überschreiben, um ein aussagekräftiges Verhalten zu ermöglichen. Sie können jedes Objekt in einer Object-Variablen speichern, da alle Klassen davon erben.

Probier es selbst

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Eingaben lesen
        String name = scanner.nextLine();
        int year = scanner.nextInt();
        scanner.nextLine(); // Zeilenumbruch konsumieren
        String brand = scanner.nextLine();
        
        // TODO: Erstelle ein Gadget-Objekt mit name und year
        
        // TODO: Erstelle ein Smartphone-Objekt mit name, year und brand
        
        // TODO: Gib den Klassennamen des Gadgets mit getClass().getSimpleName() aus
        
        // TODO: Gib aus, ob die toString()-Methode des Gadgets "@" enthält (true oder false)
        
        // TODO: Gib das Smartphone aus (verwendet die überschriebene toString()-Methode)
        
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung