LU10d - Anpassen und Erweitern
Das Konzept der Vererbung weist zwei grundlegende Aspekte betreffend der Auswirkungen auf die Programmausgestaltung aus. Eine Unterklasse kann Code erweitern oder Code in angepasster Form ausführen.
Erweitern
Das Wort „erweitern“ sagt bereits klar aus, was hier Sache ist. Eine Unterklasse erhält in diesem Fall zusätzliche Attribute und Methoden.
Beispiel
SalaryAccount
erweitert BankAccount
um die Funktion für den Kontoüberzug.
Hier mit dem Attribut overdraft
und der Property overdraft
dargestellt.
Auf der rechten Seite sehen Sie die resultierende Klasse, bestehend aus den geerbten Elementen und den Erweiterungen in SalaryAccount.
Abb: Elemente einer erweiterten Klasse
Ein Objekt der Klasse SalaryAccount
ist somit immer auch ein Objekt der Klasse BankAccount
.
Bei der Vererbung weist die abgeleitet Klasse (Unterklasse) immer auch den Typ - die Klasse - der Oberklassen auf.
Anpassen
Wird in einer Unterklasse eine „Anpassung“ vorgenommen, so heisst dies, dass eine gegebene Funktionalität (eine Methode) anders ausgeführt wird. In der Fachsprache nennt man dies auch „überschreiben“ (overwriting) einer Methode.
Beispiel
SalaryAccount
überschreibt die Methode withdraw_money()
aus BancAccount
.
So ist es nun möglich, durch den Aufruf der „gleichen“ Methode - zumindest was den Namen der Methode betrifft - einen anderen Ablauf auszuführen.
Während BancAccount
keine Bezüge zulässt, die zu einem negativen Saldo führen, kann SalaryAccount
dies tun.
Abb: Visualisierung des Überschreibens in einer abgeleiteten Klasse