Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Java 7 Grundkurs

Geerbtes Verhalten ändern

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Das Überschreiben von Methoden bietet den Vorteil, dass man eine Klasse als Basis für eine eigene Klasse verwenden und Sie danach an die persönlichen Bedürfnisse und Wünsche anpassen kann.
07:14

Transkript

Eine Unterklasse kann geerbtes Verhalten erweitern, indem sie zusätzlich eigene Methoden deklariert. Sie kann aber auch geerbtes Verhalten verändern. Nehmen wir dazu dieses Beispiel: Wir haben hier eine Klasse "Auto" mit typischen Auto-Methoden, und dann haben wir eine Unterklasse "Cabrio", die alle diese Methoden erbt und zusätzlich noch zwei weitere, Cabrio-typische Methoden deklariert. Von einem Cabrio-Objekt, das nach diesem Cabrio-Bauplan erstellt wurde, kann ich nun all diese Methoden aufrufen. Sowohl die in "Cabrio" deklarierten, als auch die in der Oberklasse "Auto" deklarierten Methoden. Insbesondere gibt es in der Klasse "Auto" eine Methode "get status". Diese Methode' gibt eine kurze Statusmeldung zurück, etwa "Hallo, ich heiße Klaus und ich fahre gerade 20 km/h". Autos können auch Namen haben. Auch diese Methode "get status" wird an die Unterklasse "Cabrio" vererbt, allerdings hätten wir es eigentlich gerne, wenn die Statusmeldung des Cabrios auch eine kurze Mitteilung beinhalten würde, ob das Dach gerade offen oder geschlossen ist. Das heißt also, wir möchten eigentlich das geerbte Verhalten gerne etwas verändern. Nun könnten wir natürlich in der Cabrio-Klasse einfach eine weitere Methode einbauen, "get cabrio status" oder so, was wir aber auch machen könnten, ist die geerbte "get status" Methode überschreiben. Das bedeutet, dass wir in der Unterklasse eine Methode anlegen, die exakt dieselbe Signatur hat. Das heißt also, den gleichen Namen trägt, Groß-/Kleinschreibung beachten, dieselbe Parameterliste und den selben Rückgabetyp. In diese Methode können wir dann unser gewünschtes neues Verhalten hinein schreiben. Machen wir das am besten mal praktisch. Wir haben hier die Klasse "Auto" und hier ist die "get status"-Methode. Diese Methode erstellt die Statusmeldung der Klasse und verwendet dabei die beiden Attribute "Name" und "Geschwindigkeit". Um diese Methode nun in der Unterklasse zu überschreiben, müssen wir dort eine Methode exakt desselben Namens anlegen. Deshalb kopiere ich die jetzt hier mal und füge sie dann in der Unterklasse ein. Am besten hier unten, kurz vor dem Ende. Erstmal die Formatierung anpassen, rechte Maustaste "Format". So, jetzt haben wir hier zwei kleine Probleme: Die Attribute "Name" und "Geschwindigkeit" sind natürlich aus der Unterklasse heraus nicht zugreifbar. Denn in "Auto" sind die beiden ja als "private" deklariert. Aber glücklicherweise gibt es ja in eben dieser Auto-Klasse auch zwei get-Methoden, nämlich "get Geschwindigkeit" und "get Name", die nicht "private" sind. Können wir die also hier benutzen. Also hier "get Name", Strg+Leertaste, spart wieder ein bisschen Tipparbeit und "get Geschwindigkeit" und jetzt sind die Compilerfehler weg. Bis jetzt ist das aber noch kein Ändern des Verhaltens, deshalb hängen wir jetzt den aktuellen Zustand des Daches noch hinten dran. Ich mache das mal in eine neue Zeile. Hier können wir durchaus mal den ternären Operator verwenden, das sieht dann so aus: noch ein plus und jetzt abhängig von der Variablen "Dach offen" möchten wir gerne den Text "offen" oder "geschlossen" ausgeben. Also schreiben wir "Dachoffen?offen:geschlossen". Also, wenn diese Variable "true" ist, dann wird dieser Text verwendet, ansonsten wird dieser Text verwendet. Sie sollten diesen Operator mit Bedacht verwenden, im Zweifelsfall geht Lesbarkeit vor. So, nun haben wir eigentlich unser Verhalten erfolgreich angepasst, allerdings verletzen wir hier ein wichtiges Prinzip, das DRY-Prinzip nämlich "Don't repeat yourself". Wir wiederholen uns aber und zwar indem wir hier dieses Stückchen schreiben, was ja in der Oberklasse genau so eigentlich schon mal drin steht. Wenn wir doch nur die Methode der Oberklasse aufrufen könnten, um dann unsere Erweiterung hinten dran zu hängen. Oh, Moment - genau das können wir ja. Um an die Methode der direkten Oberklasse ranzukommen, benötigen wir das Schlüsselwort "super". Dieses Wort kommt einfach daher, dass Oberklasse im englischen Sprachgebrauch "superclass" heißt. Nach diesem "super" setzen wir einen Punkt und jetzt bekommen wir eine Liste der Methoden, auf die wir da zugreifen können. Und hier haben wir schon unser "get status". NetBeans sortiert uns die Methoden ein wenig vor, und zeigt uns zuerst diejenigen an, die vom Rückgabetyp her am besten passen würden. Wenn Sie übrigens dieses Fehlerzeichen hier immer noch stört, speichern Sie einfach mal zwischendurch, dann verschwindet das. Um jetzt das Ganze mal auszuprobieren, müssten wir ja "get status" von einem Cabrio-Objekt aufrufen und genau das passiert in unserer Main-Methode bereits. Hier haben wir ein Cabrio-Objekt, das hier erzeugt wird, mit dem Namen "Karl", dann wird ein wenig beschleunigt, und danach wird vom Cabrio der Status abgefragt. Dann führen wir es mal aus. Sie sehen: Karl fährt gerade 1 km/h und das Dach ist gerade geschlossen. Die anderen Meldungen hier unten kommen von unseren anderen beiden Autos, die wir hier in einem Array gelagert haben. Da haben wir ein Auto "Anna" und dann haben wir darunter noch ein Auto "Bernhard". Am Ende wird hier mit einer Vorschleife durch das Array durch iteriert und von allen Autos, die sich darin befinden, wird "get status" aufgerufen, und das und von Ergebnis ausgegeben. Das sehen wir hier unten, Anna fährt gerade 0 km/h und Bernhard fährt auch gerade 0 km/h. Nun wollen wir uns mit unserem Cabrio mal unter die anderen Autos mischen. Dazu vergrößere ich dieses Array um 1 und setze das Cabrio hier gleich zu Beginn an die letzte Stelle. Da der Array-Index ja immer bei 0 beginnt, ist die letzte Stelle also die 2. Also, Autos 2 und hier hinein kommt jetzt unser Cabrio. Das Array ist deklariert als ein Array für Auto-Objekte. Cabrio ist eine Unterklasse von Auto und deshalb darf ich also Cabrios ebenfalls hier hinein packen. Cabrio ist ein Auto. Das ist ja das, was die Vererbung besagt. Nun führen wir das Programm nochmal aus. Wie wir sehen können, klappt das mit den Statusmeldungen hier unten hervorragend. Auch wenn die Vorschleife hier unten, also auf einem Auto-Array agiert und jedes Objekt darin als Auto anspricht, so weiß unser Cabrio hier offensichtlich trotzdem sehr gut, dass es ein Cabrio ist. Das ist der Vorteil von Objekten, sie wissen selbst immer sehr genau darüber Bescheid, was für ein Objekt sie sind. Und wenn ich zu einem Cabrio-Objekt gehe und die "get status" Methode aufrufe, dann bekomme ich immer die Funktionalität, die in der Cabrio-Klasse beschrieben ist. Völlig egal, auf welchem Weg ich zu dieser Methode gelangt bin. Das Überschreiben von Methoden bietet uns also die Möglichkeit, eine Klasse als Basis für unsere eigene Klasse zu verwenden, und sie dann unseren Wünschen entsprechend anzupassen. Dabei können wir über das Schlüsselwort "super" auf die Funktionalität dieser Basisklasse zugreifen und sie in die Methoden unserer Unterklasse mit einbauen.

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!