10.5 Überschreiben von Methoden
Bislang haben wir die Möglichkeiten, die uns die Vererbung bietet, nur dazu genutzt um eine bestehende Klasse zu erweitern. Die abgeleitete Klasse erbt dabei zunächst die Attribute und Methoden ihrer Oberklasse und kann darüber hinaus um zusätzliche Attribute und Methoden erweitert werden.
Nicht immer erfüllen die von der Oberklasse geerbten Methoden jedoch genau die Anforderungen, die an die neu abgeleitete Klasse gestellt werden.
Aufgabe 10-6: robi
geh vorwärts! Aber nur, wenn der Weg frei ist...
Die Klasse RoboterErweitert
hat von ihrer Oberklasse Roboter
unter anderem die Methode gehVorwaerts()
geerbt.
Die Anforderungen an die Klasse RoboterErweitert
sehen jedoch vor, dass ein Objekt dieser Klasse bei Aufruf der Methode gehVorwaerts()
nicht mehr einfach in blindem Gehorsam ein Feld vorwärts geht. Stattdessen soll es zunächst selbst prüfen, ob der Weg vor ihm wirklich frei ist, und nur dann ein Feld vorwärts gehen. Explodierende Roboter gehören damit der Vergangenheit an.
Aufgabe
- Lesen Sie zunächst den Abschnitt „Merke: Methoden überschreiben“.
-
Erfüllen Sie dann die gestellte Anforderung, indem Sie in der Klasse
RoboterErweitert
die von der KlasseRoboter
geerbte MethodegehVorwaerts()
in geeigneter Weise überschreiben. Lösung
Lösung
Fragen 10-1: Objektorientierung
-
Worin liegt der Unterschied zwischen dem Überladen und dem Überschreiben einer Methode? Welcher Zweck wird dabei jeweils verfolgt?
Lösung
Lösung
Eine Methode wird überladen, wenn eine weitere Methode gleichen Namens erstellt wird und beide Methoden eine unterschiedliche Signatur besitzen.
Dagegen wird eine Methode, die von einer Oberklasse geerbt wurde, überschrieben, wenn in der Unterklassen eine Methode gleichen Namens erstellt wird und beide Methoden die gleiche Signatur besitzen. -
Was bewirken jeweils die folgenden Anweisungen?
super();
super.gehVorwaerts();
Lösung
Die Anweisung
super()
ruft den parameterlosen Konstruktor der Oberklasse auf.Wenn in der Unterklasse die Methode
gehVorwaerts()
überschrieben wurde, kann mit der Anweisungsuper.gehVorwaerts()
die in der Oberklasse derfinierte (Original-)MethodegehVorwaerts()
aufgerufen werden.