Methoden Überschreiben
und @Override
Mit dem Laden des Videos akzeptierst du die Datenschutzerklärung von YouTube. Wenn du die Menge an Daten reduzieren möchtest, die YouTube von dir sammelt, solltest du dich vorher aus deinem YouTube-Account ausloggen, das Speichern von Cookies für das Google-Ads-Programm deaktivieren und/oder Cookies im Browser blockieren.
YouTube immer automatisch ladenInhaltsverzeichnis
Als Text lesen
Wenn eine Klasse von einer anderen erbt, werden ja alle Attribute und Methoden implizit von der Oberklasse in die Unterklasse übernommen. Folgendes Beispiel:
Car.java
GolfCar.java
GolfCar erbt von Car und übernimmt daher implizit die Methode slowDown(). Wenn also irgendwo someGolfCar.slowDown() aufgerufen wird, passiert für das GolfCar genau das gleiche wie beim Aufruf von slowDown() auf einem Car Objekt. Was, wenn das Verhalten der Methode in der Unterklasse aber anders sein soll?
Hierfür ist es möglich, Methoden zu überschreiben:
Wenn die Signatur einer Methode der Unterklasse mit der Signatur einer Methode der Oberklasse übereinstimmt, wird beim Aufruf die Methode der Unterklasse ausgeführt. Man spricht hierbei davon, dass die Methode überschrieben wurde.
Der Übersicht halber vermerkt man eine überschriebene Methode mit @Override.
Im gegebenen Beispiel könnte also die Klasse GolfCar wie folgt verändert werden:
Falls nun auf ein GolfCar Objekt slowDown() aufgerufen wird, wird anstatt der Methode in Car nun die Methode in GolfCar ausgeführt.
Eine Sache habe ich dir verschwiegen
Wenn du eine Klasse nicht (durch Verwendung von extends) von einer anderen erben lässt, hat sie trotzdem eine Oberklasse. Der Grund dafür ist folgender:
Jede Klasse (ohne explizite Oberklasse) erbt implizit von der Klasse Object.
Und das hat einige Vorteile. Beispielsweise sind in der (standardmäßig vorhandenen) Klasse Object die Methoden toString() und equals() implementiert:
toString()wandelt ein Objekt in eineStringDarstellung um. (Praktisches Feature: Falls ein Objekt anSystem.out.println()übergeben wird, gibtprintln()immer genau dieseStringDarstellung aus.)equals(Object o)gibttruegenau dann zurück, wenn das übergebene Objekt gleich ist wie die eigene Instanz
Jede Klasse in Java kann diese Methoden überschreiben, und damit selbst angeben, wie ein Objekt dieser Klasse als String aussehen soll, bzw. wann zwei Objekte dieser Klasse als gleich angesehen werden. Beispiel:
Hier wird beim Aufruf von toString() nun der String "VORNAME NACHNAME" erzeugt, und nicht mehr der ursprüngliche Rückgabewert, den die Methode toString() in Object produziert hätte.
a) Füge zu der Klasse Shape aus der letzten Aufgabe eine Methode area() hinzu, die den Flächeninhalt der jeweiligen Figur als double zurückgibt:
In der Klasse Shape selbst darf als Platzhalter 0.0 zurückgegeben werden. Die restlichen Klassen sollen die Methode (falls sinnvoll) überschreiben und abhängig von der eigenen Figur einen passenden Wert zurückgeben.
Formeln für Flächeninhalte
| Figur | Attribute | Formel für Flächeninhalt |
|---|---|---|
| Rechteck | Breite a, Höhe b | a · b |
| Quadrat | Seitenlänge a | a2 |
| Kreis | Radius r | π · r2 |
Eine Annäherung für π bekommst du in Java über Math.PI.
b) Überschreibe anschließend in allen Klassen die toString() Methode, sodass der Code
folgende Ausgabe erzeugt:
Figur an Position (2.0, 3.0) mit Flächeninhalt 0.0 Rechteck-Figur an Position (2.0, 3.0) mit Flächeninhalt 20.0 und den Maßen 4.0 x 5.0 Gleichseitige Rechteck-Figur an Position (2.0, 3.0) mit Flächeninhalt 16.0 und den Maßen 4.0 x 4.0 Kreis-Figur an Position (2.0, 3.0) mit Flächeninhalt 113.09733552923255 und Radius 6.0
Häufige Fehlerquellen
java: method does not override or implement a method from a supertype: Du hast ein@Overridevor einer Methode, die gar nicht in einer Oberklasse existiert- Falsche Berechnung der Flächeninhalte
- Falsche Verwendung der
superAufrufe
Lösungsvorschlag Shape.java
Lösungsvorschlag Rectangle.java
Lösungsvorschlag Square.java
Lösungsvorschlag Circle.java
Interesse an einer Zusammenarbeit?
- Entwicklung von Desktopanwendungen
- Datenanalyse & Machine Learning
- Automatisierte Datenverarbeitung