Java 7 Grundkurs

Die Basisklasse aller Klassen: Object

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die Basis aller Klassen bildet Object. Damit vererben sich alle ihre Methoden auf alle anderen Klassen. Lernen Sie die Dokumentation und die vielfältigen Methoden im Beispiel kennen.
06:49

Transkript

Wenn wir eine Klasse deklarieren, wie hier z.B. die Klasse "Cabrio", dann können wir mit "Extense" eine Oberklasse angeben, z. B. hier die Klasse Auto. Das heißt dann: "Cabrio" ist eine Unterklasse von "Auto"; "Cabrio" erbt also alles von "Auto". Geben wir keine Oberklasse an, lassen wir also das "Extense" weg, wie in der Klasse "Auto" beispielsweise da steht kein "Extense" dahinter -, dann hat diese Klasse aber trotzdem eine Oberklasse, nämlich die Klasse "Object". "Object" ist also die Basisklasse, die Oberklasse für alle anderen Klassen, sowohl aus der Standardbibliothek, als auch die selbst geschriebenen Klassen. Ganz oben in der Vererbungshierarchie steht immer diese Klasse "Object". Hier haben wir die Dokumentation zu dieser Klasse. Wir sehen: Die Klasse befindet sich im Paket "Java.lang". Klassen aus diesem Paket müssen nicht extra importiert werden, damit man sie benutzen kann. Hier in der Beschreibung steht das auch noch einmal drin: Die Klasse "Object" ist die Wurzel der gesamten Klassenhierarchie und jede Klasse hat "Object" irgendwo als Oberklasse. Das heißt natürlich auch, dass alle Methoden, die in dieser Klasse "Object" deklariert sind, vererbt werden an alle anderen Klassen. Das sind gar nicht so wenig Methoden. Wir haben hier z.B. eine Methode "hashCode", die gibt so etwas wie eine Prüfsumme über dieses Objekt zurück. Wir haben eine Methode "equals", die ermöglicht es, dieses Objekt mit einem anderen Objekt zu vergleichen, und wir haben hier z. B. eine Methode, die heißt "toString". Als Beschreibung steht dazu: "Gibt eine textuelle Repräsentation dieses Objektes zurück". Das ist eigentlich genau das Gleiche, was unsere Methode "getStatus" in der Klasse "Auto" macht. Schauen wir da einmal kurz hinein: Hier haben wir die Klasse "Auto" und hier unten gibt es eine Methode "getStatus". Die gibt eine kurze textuelle Beschreibung dieses Objekts zurück. Hier kommt erst der Name des Autos, dann der Text "fährt gerade", die aktuelle Geschwindigkeit und hintendran "km/h". Diese Methode ist in der Unterklasse "Cabrio" überschrieben worden. Hier steht "super.getStatus", d. h. erst einmal das, was in "Auto" drinsteht und hintendran noch "und das Dach ist gerade offen oder geschlossen". Also auch hier wieder: eine kurze textliche Beschreibung des Objekts. Anstatt uns also selbst einen Namen für diese Methode auszudenken, hätten wir auch die Methode "toString", die wir von "Object" geerbt haben, überschreiben können. Der Vorteil wäre: Jeder Java-Entwickler kennt die toString-Methode und ihren Zweck. Wenn er also eine toString-Methode irgendwo sieht, dann weiß er sofort, was sie tut. Also ändern wir einfach den Namen der Methode von von "getStatus" in "toString". Jetzt könnten wir natürlich durch das ganze Programm durchgehen, alle Stellen suchen, wo "getStatus" steht und hoffen, dass wir keine vergessen; aber wir haben ja eine IDE und da geht das natürlich auch ein bisschen einfacher. Ich drücke Strg+R, wie "Rename", dann bekomme ich eine kleine Warnung: "Die Methode überschreibt eine Methode aus der Oberklasse". Das heißt, wenn ich die jetzt ändere, wird auch die in der Oberklasse umbenannt. Aber das ist okay. Das ist genau das, was ich haben möchte. Also drücke ich auf "Next", und jetzt gebe ich hier den neuen Namen ein: "toString", dann drücke ich auf "Refactor", und dann heißt die Methode "toString". Wir sehen hier: "return super.toString" wurde auch umbenannt. Schauen wir in die Klasse Auto, da heißt die Methode jetzt auch "toString". In der Klasse "Auto Demo", in der hier am Ende durch alle Autos durchgegangen wird und der Reihe nach der Status ausgegeben werden soll, wird ebenfalls korrekterweise "toString" aufgerufen. Das Umbenennen hat also recht fix funktioniert. Wenn Sie kein Fan von Tastenkombinationen sind: Sie können das auch mit der Maus machen. Einfach die rechte Maustaste auf die Methode, und dann haben wir einen Punkt, der heißt "Refactor", und der erste Punkt dort heißt "Rename". Wir müssen noch eine kleine Anpassung in der Klasse "Auto" vornehmen. Die Methode heißt ja hier "toString". Diese Methode überschreibt die geerbte Methode der Oberklasse. Wenn wir etwas überschreiben, dann sollten wir dem Compiler auch sagen, dass wir das überschreiben. Wir setzen hier die Annotation "Overwrite" dran. Damit geben wir dem Compiler die Möglichkeit, dass er überprüfen kann, ob wir auch tatsächlich die Methode aus der Oberklasse überschreiben. Und wenn nicht, dann bekommen wir nämlich einen Compiler-Fehler. Die Verwendung von "toString" statt "getStatus" ermöglicht uns noch eine zusätzliche Vereinfachung unseres Programms, wenn auch nur eine kleine -, und zwar an dieser Stelle: Hier steht "System.out.println" und dahinter dann "Auto.toString". Das heißt: Gehe zum Auto, ruf "toString" auf, nimm den String, der zurückkommt und gib den an die Konsole aus. Diese Methode "println" in der Standardbibliothek ist recht clever implementiert. Wenn ich ihm nämlich einfach nur ein Objekt übergebe, das kein String ist, dann geht sie einfach zu dem Objekt hin und ruft "toString" auf. Das gilt dann natürlich auch hier und hier, sowie hier. Ich kann an diese Methode "println" also so ziemlich alles übergeben. Wenn ich einfache Datentypen übergebe, wie Zahlen z. B., dann werden einfach diese Zahlen ausgegeben. Übergebe ich einen String, dann wird dieser Text ausgegeben. Übergebe ich irgendein Objekt, dann wird von diesem Objekt "toString" aufgerufen und das, was diese Methode zurückgibt, das wird dann ausgegeben. Was passiert nun aber, wenn Sie ein Objekt auf diese Weise ausgeben möchten, und es aber vergessen haben, die Methode "toString" zu überschreiben? Probieren wir es einfach aus: Ich gehe in die Klasse "Cabrio". Ich kommentiere das Ganze aus, indem ich alle Zeilen markiere und Strg+Shift+C wie "Comment" drücke. Das Gleiche mache ich in der Klasse "Auto" ebenfalls: Hier auch "toString" auskommentieren und Programm ausführen. Wir sehen: Die Meldungen sehen etwas kryptisch aus. Bieten wir selbst keine toString-Methode in unserer Klasse an, dann erben wir natürlich die toString-Methode aus der Klasse "Object". Diese macht etwas recht simples: Die gibt einfach nur den vollständigen Namen der Klasse aus, z. B. hier oder hier. Dann kommt ein @-Zeichen und dann kommt eine längere hexadezimale Zahlenfolge. Das ist der bereits vorhin kurz erwähnte "Hashcode", also so etwas wie die Prüfsumme des Objekts. Also nehmen wir die Kommentare lieber ganz schnell wieder raus. So, einmal hier und einmal hier. Dann bekommen wir wieder die Implementierung zum Laufen, die wir selbst geschrieben haben. Sie sehen also: Die Klasse "Object" ist tatsächlich die Basisklasse aller Klassen. Die Methoden, die in der Klasse "Object" deklariert wurden, werden an alle anderen Klassen vererbt. Sie können dann das geerbte Verhalten anpassen, indem Sie diese Methoden entsprechend Ihren Wünschen überschreiben, so wie wir das hier mit der toString-Methode gemacht haben.

Java 7 Grundkurs

Machen Sie sich mit den Grundlagen der Java-Programmierung vertraut und lernen Sie die Syntax der Sprache sowie das Konzept der objektorientierten Softwareentwicklung kennen.

8 Std. 32 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!