4.5.3 | Überschreiben von Methoden |
Bisher wurden lediglich Konstruktoren und Methoden hinzugefügt. Häufig ist es aber erforderlich, dass eine Unterklasse eine geerbte Methode anders implementieren muss, als es bei der Oberklasse der Fall ist. Hierzu kann die Unterklasse die betreffende Methode überschreiben.
Zur Verdeutlichung sei eine Klasse RoundSquare definiert, die von Square abgeleitet wird. Sie stellt ein Quadrat mit abgerundeten Ecken dar.public class RoundSquare extends Square { int r; // Eckenradius public RoundSquare(int x, int y, int color, int a, int r) { super(x, y, color, a); this.r = r; } public void resize(int a) { r *= a/this.a; super.resize(a); } public int area() { return (int)(super.area()-r*r*(4-Math.PI)); } }RoundSquare benötigt ein weiteres Datenelement r für den Radius der runden Ecke. Ferner wird ein Konstruktor definiert, der das Belegen aller Datenelemente erlaubt. Der Konstruktor von Square wird benutzt, um die geerbten Datenelemente zu setzen.
Die Methode resize() wird in RoundSquare überschrieben, um zusätzlich den Krümmungsradius der Ecken anzupassen. Da wir die Funktionalität der geerbten resize()-Methode bezüglich der Seitenlänge voll übernehmen können, rufen wir die geerbte Methode auf, um a einzustellen. Entsprechend wird area() unter Wiederverwendung der geerbten Methode überschrieben.
Falls die geerbte Methode Exceptions auslöst und über eine throws-Klausel verfügt, darf der throws-Klausel keine neue Exception mehr hinzugefügt werden. Im Detail wird dieser Sachverhalt im Abschnitt 5.10 erläutert.