Verständnisproblem: Shadowing und Initialisierung von Klassen

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

    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:
    1. man kann weitere Methoden dranproggen
    2. man kann gegebene Methoden verändern (wobei einiges zu beachten ist)
    3. Nicht möglich ist, geerbte Methoden wieder verschwinden zu lassen.
    1) ist trivial, aber 2) - das Verändern gegebener Methoden hat wieder einige Optionen
    • Ü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 als Overridable 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.
    Also in post#1 der Aufruf 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“ ()

    Die Ersteklasse wird von der Zweitenklasse geerbt



    aber im Punkt 1 steht es einfach falsch drin: nicht die ErsteKlasse erbt von der zweiten sondern umgekehrt


    Die Ersteklasse wird von der Zweitenklasse geerbt, bedeutet, dass die Zweiteklasse von der Ersteklasse erbt.
    Genau das was ich geschrieben habe.

    Das mit der Kette bzw Durchlauf war nur zur Veranschauung, da die Klassen chronologisch voneinander erben (4 erbt von 3, 3 von 2,2 von 1).