Java 7 Grundkurs

Vererbung

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Ein ganz wesentliches Konzept der Objektorientierung ist die Vererbung. Sie erfahren in diesem Video, was sich dahinter verbirgt, was es Ihnen nützt und wie Sie es in Java umsetzen.
08:36

Transkript

Ein wesentliches Konzept der Objektorientierung ist die Vererbung. In diesem Video erfahren Sie, was sich dahinter verbirgt was es ihnen bringt und wie Sie das mit Java umsetzen können. Nehmen wir als Beispiel mal diese Klasse "Auto". In dieser Klasse sind diverse Methoden deklariert, die die Funktionalität von "Auto-Objekten" beschreiben sollen. Wir sehen hier die Methoden "Beschleunigen()", "Bremsen()", "Anhalten()" und "Hupen()". Nun soll die Anwendung, in der sich diese Klasse befindet, um eine weitere Klasse erweitert werden, und zwar um die Klasse "Cabrio". Ein Cabrio soll beschleunigen und bremsen können, es soll anhalten können, natürlich hupen, und, da es ein Cabrio ist, soll es natürlich sein Dach öffnen und schließen können. Bei einer ausführlichen Betrachtung der beiden Klassen werden Sie feststellen, dass es gewisse Gemeinsamkeiten zwischen diesen beiden Klassen gibt. Genau genommen besteht der einzige Unterschied eigentlich in den letzten beiden Methoden, die das Cabrio bekommen soll. Alle anderen Methoden sind offensichtlich die gleichen wie wie in der Klasse "Auto". Nun könnte man natürlich die "Auto-Klasse" kopieren und einfach um die fehlenden Methoden ergänzen. Aber das wäre ja Quatsch, dann hätten wir ja den Code für die ersten vier Methoden doppelt. Wenn später einmal ein anderer Entwickler in der Klasse "Auto" einen Bug findet und den behebt, dann muss er wissen, dass er in der Klasse "Cabrio" denselben Bug ebenfalls beheben muss. Außerdem wäre der Umstand, dass ein Cabrio ja letztlich eine spezielle Art von Auto ist, ist nirgendwo ables- oder erkennbar. Hier kommt nun das Konzept der Vererbung ins Spiel. Wir haben die Möglichkeit, die Klasse "Cabrio" als Erweiterung der Klasse "Auto" zu deklarieren. "Cabrio" wird damit zu einer Unterklasse von "Auto", und "Auto" ist die Oberklasse für "Cabrio". In solchen Diagrammen zeigt der Pfeil immer von der Unterklasse zur Oberklasse. Durch diese Vererbungsbeziehung müssen wir in der Klasse "Cabrio" jetzt nur noch die beiden Methoden "ÖffneDach()" und "SchließeDach()" deklarieren. Alle anderen Methoden erbt diese Klasse von der Oberklasse. Nun schauen wir uns mal an, wie das ganze mit Java umgesetzt wird. Hier haben wir die Klasse "Auto" aus unserem Diagramm, und hier links im Überblick können wir sehr gut sehen: Diese Klasse hat eben die Methoden "Anhalten()", "Beschleunigen()", "Bremsen()" und so weiter. Nun deklarieren wir die Klasse "Cabrio". Die Klasse soll ins selbe Package wie die Klasse "Auto", also klicken wir hier auf das Package "Fahrzeuge" mit der rechten Maustaste und sagen "New Java Class". Als Name geben wir an: "Cabrio", als Package ist nun schon "Fahrzeuge" voreingestellt. "Finish", und die Klasse wird erstellt. Um diese Klasse nun zu einer Unterklasse von "Auto" zu machen, müssen wir die Klassendeklaration entsprechend anpassen. Dazu schreiben wir hier hinter "Public Class Cabrio": "Extends Auto". "Extends" heißt erweitert, also die Klasse "Cabrio" erweitert die Klasse "Auto". Sie bekommt also alles, was die Klasse "Auto" hat und kann selbst noch etwas hinzufügen. Jetzt können wir also die beiden Methoden "ÖffneDach()" und "SchließeDach()" hinzufügen. Die Methode muss nichts entgegennehmen, sie muss auch nichts zurückgeben. Um die Implementierung kümmern wir uns gleich. Zuerst einmal nur die Methoden selbst. Da wir ja nun nicht wirklich ein Cabrio haben, von dem wir das Dach öffnen schließen können, geben wir einfach einen kurzen Text aus: "Dach wird geöffnet", "Dach wird geschlossen". Aber man sollte ein geöffnetes Dach nicht öffnen und ein geschlossenes Dach nicht schließen können. Das Cabrio muss sich also irgendwie merken, ob das Dach offfen oder geschlossen ist. Da es sich hier um zwei verschiedene Zustände handelt, die einander ausschließen, verwenden wir dafür eine "Boolesche Variable". Wir fügen also der Klasse "Cabrio" ein weiteres Attribut hinzu, also ein weiteres, zusätzlich zu denen, die es bereits von "Auto" geerbt hat. Ich nenne es "DachOffen". Wenn später ein Cabrio-Objekt erzeugt wird, dann werden ja alle seine Attribute initialisiert, und wenn ich nichts weiter angebe, bekommen sie ihre Standardwerte. Bei "Boolean" ist der Standardwert "False". Das heißt, das "Dach Offen-Attribut" ist standardmäßig auf "False" gesetzt, das Dach ist also geschlossen. Nun können wir uns an die Implementierung unserer Methoden machen. Zuerst "ÖffneDach()". Überlegen wir kurz, was die Methode tun soll. Wenn das Dach nicht offen ist, dann soll es geöffnet werden, also wir geben einen kurzen Text aus. Ansonsten können wir einfach gar nichts tun oder eine Meldung ausgeben: "Das Dach ist schon offen." Verwenden wir also ein "if" dafür: "if not(DachOffen) Dach wird geöffnet". Jetzt müssen wir natürlich noch das Dach tatsächlich öffnen, also die Variable auf "True" setzen. So, die Methode "SchließeDach()" sieht nun genauso aus, bzw. fast genauso. Hier geht es genau anders herum. Wenn das Dach offen ist, dann geben wir aus "Dach wird geschlossen" und "Dach wird geschlossen" und schließen das Dach, indem wir "Dach offen" auf "False" setzen. Obwohl wir in dieser Klasse nur zwei Methoden deklariert haben, hat die Klasse "Cabrio" insgesamt alle Methoden zusätzlich, die in Auto bereits deklariert wurden. Hier links unten im Navigator können wir das sehen, wenn wir ganz links unten auf diese Mannequin klicken. Dann sehen wir die geerbten Methoden mit dazu. Hier haben wir "setName()" und "getName()", wir haben "getGeschwindigkeit()" und weiter oben haben wir "Beschleunigen()" und "Bremsen()". Klicke ich nochmal drauf, sehen wir wieder nur die Methoden, die in diesser Klasse deklariert wurden. Probieren wir unsere "Cabrio-Klasse" aus, indem wir eine Instanz davon erzeugen. Ich mache das mal hier in der "Mengen()-Methode" gleich zu Beginn. Ein Cabrio, nennen wir es "MeinCabrio" und ein Semikolon. Jetzt kann ich von diesem Cabrio alle Methoden aufrufen, die auch in "Auto" schon drinstehen. Das heißt, ich kann dieses Cabrio beschleunigen, ich kann das Cabrio anhalten, und ich kann natürlich das machen, was ich nur mit einem Cabrio machen kann: ich kann das Dach öffnen und schließen. Und, Dach wieder zu. Probieren wir es aus. Wir sehen hier: "Dach wird geöffnet", "Dach wird geschlossen". Hervorragend, funktioniert alles. Wenn es Ihnen nicht genügt, dass es keine Compilerfehler gab, und Sie sehen wollen, ob diese Methodenaufrufe hier oben wirklich erfolgreich waren, dann können wir ja den Status ausgeben lassen. Denn auch die "getStatus()-Methode" hat das Cabrio ja geerbt. "getStatus()", geben wir es aus, und schauen, wie schnell das Cabrio fährt, nachdem wir es einmal beschleunigt haben. Und was sehen wir hier? Wir sehen hier: Anonym fährt gerade 1km/h. Warum Anonym? Wir haben dem Cabrio ja keinen Namen gegeben und deshalb, wir sehen das hier in der Klasse "Auto", wird der Name auf "Anonym" gesetzt. Man nennt diese Beziehung zwischen Unterklasse und Oberklasse auch "Ist-Ein"-Beziehung, denn ein Cabrio ist ja ein Auto. Cabrio erbt ja alle Methoden von Auto und da die Methoden das Verhalten beschreiben, kann sich ein Cabrio also auch verhalten wie ein Auto. Die Vererbung bringt uns also einige Vorteile. Wir können unseren Code wiederverwenden. Das, was wir in Auto einmal geschrieben haben, müssen wir in Cabrio nicht noch mal schreiben, können es dort einfach noch mal verwenden. Die Wartbarkeit unserer Anwendung verbessert sich. Wenn wir in Auto einen Bug finden sollten und den beheben, dann ist der für Cabrio automatisch mit behoben. Auch das Erweitern der Anwendung wird vereinfacht, also das Hinzufügen neuer Features. Wenn unsere Autos z. B. eines Tages links-oder rechtsherum fahren können, dann können Cabrios das automatisch auch. Damit haben Sie also nun einen ersten Überblick über das Konzept der Vererbung und wissen, wie Sie es mit Java umsetzen können.

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!