naja, das sind die Details, die sich aus der Vererbung ergeben.
Sonnes Bildle zeigt schön, dass 4 alles von 1, 2, und 3 enthält, und noch mehr.
Eine erbende Klasse ist ihre Basisklasse, zuzüglich spezifischer Erweiterungen/Veränderungen.
Nun gibts 2 verschiedene Möglichkeiten, die Basisklasse zu modifizieren:
Obwohl in
Hingegen der Aufruf
(dabei ist in beiden Variablen (
Ich finds immer wieder erstaunlich, mit wie wenig Regeln doch sehr komplexe und schwer zu durchschauende Konstruktionen aufbaubar sind.
Sonnes Bildle zeigt schön, dass 4 alles von 1, 2, und 3 enthält, und noch mehr.
Eine erbende Klasse ist ihre Basisklasse, zuzüglich spezifischer Erweiterungen/Veränderungen.
Nun gibts 2 verschiedene Möglichkeiten, die Basisklasse zu modifizieren:
- man kann weitere Methoden dranproggen
- man kann gegebene Methoden verändern (wobei einiges zu beachten ist)
- Nicht möglich ist, geerbte Methoden wieder verschwinden zu lassen.
- Überladen: man proggt eine Methode gleichen Namens, die aber annere Parameter erwartet. Das Original der Basisklasse bleibt erhalten, man hat halt eine zusätzliche Überladung. Prinzipiell gilt hier das Schlüsselwort
Overloads
, aber meist kanns weggelassen werden. - Überschreiben: man proggt die gegebene Methode mit genau denselben Argumenten und Rückgabewert, und kennzeichnet mit Schlüsselwort
Overrides
. Dadurch ist die Original-Methode nicht mehr zugreifbar.
Überschreibungen sind nur zulässig für Basis-Methoden, die auch alsOverridable
gekennzeichnet sind. - Abschattieren: man proggt eine Methode gleichen Namens (egal ob gleiche Argumente), und kennzeichnet mit Schlüsselwort
Shadows
. Dadurch ist die Original-Methode nicht mehr zugreifbar für Variablen des erbenden Typs
Variablen des BasisklassenTyps hingegen kennen die schattierende Methode nicht.
locErsteKlasse.EineFunktion()
addressiert die Überschreibung in ZweiteKlasse
, nicht aber die Abschattierung in Dritteklasse
oder gar die Überschreibung der Abschattierung in Vierteklasse
.Obwohl in
locErsteKlasse
ja ein VierteKlasse
-Objekt enthalten ist.Hingegen der Aufruf
locDritteKlasse.EineFunktion()
addressiert die Überschreibung in VierteKlasse
der Abschattierung in DritteKlasse
(dabei ist in beiden Variablen (
locErsteKlasse, locZweiteKlasse
) doch dasselbe Objekt, nämlich eine Instanz von VierteKlasse
)Ich finds immer wieder erstaunlich, mit wie wenig Regeln doch sehr komplexe und schwer zu durchschauende Konstruktionen aufbaubar sind.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „ErfinderDesRades“ ()