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:
| Methode | Zweck |
|---|---|
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@1a2b3c4dAus 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.
Aufgabe
EinfachLassen 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) undyear(int) - Einen Konstruktor, der beide Felder initialisiert
- Getter-Methoden
getName()undgetYear()
- Private Felder für
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])
- Ein privates Feld für
Main.java: Demonstrieren Sie den Unterschied zwischen Standard- und überschriebenenObject-Methoden. Sie erhalten drei Eingaben: einen Gadget-Namen, ein Jahr und eine Marke. Erstellen Sie sowohl einGadgetals auch einSmartphonemit 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 Sietrueoderfalseaus) - Geben Sie das Smartphone mit seiner überschriebenen Methode
toString()aus
- Geben Sie den Klassennamen des Gadgets mit
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:
| Methode | Zweck |
|---|---|
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@1a2b3c4dSie 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)
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenFelder (Attribute)Konstruktor-MethodeKonstruktor-ÜberladungRückblick – Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (extends)Das super-SchlüsselwortMethoden überschreiben (@Override)Konstruktor-VerkettungDie Object-KlasseEinfache & mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-InterfaceZusammenfassung – Benutzerdefiniertes Sortieren2Zugriffsmodifikatoren & Kapselung
Überblick über ZugriffsebenenGetter- und Setter-MethodenInformation HidingDas final-SchlüsselwortRückblick – Bankkonto-Manager5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenZusammenfassung – Formenrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, geschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Sealed Classes (Java 17+)11Design Patterns Teil 1
Einführung in Design PatternsSingleton-PatternFactory-PatternBuilder-PatternObserver-PatternStrategy-Pattern14Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung3Klasseneigenschaften & Statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Zusammenfassung – Zähler & Utility6Interfaces & Abstrakte Klassen
Einführung in InterfacesInterfaces implementierenImplementierung mehrerer InterfacesDefault- & statische Methoden in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesZusammenfassung - Zahlungssystem