Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Vererbung: Wie rufe ich Klasse.Parent.Methode auf?

  Alt 27. Okt 2014, 13:45
Delphi-Quellcode:
...
procedure TMutter.a(x: Boolean);
begin
...
  TKind(Self).b;
...
Schwerer Fehler.
1. Woher soll die Mutter wissen, das es ein Kind gibt?
Delphi-Quellcode:
...
  if Self is TKind then (Self as TKind).b;
...
2. Welche Methode soll aufgerufen werden, wenn es noch eine Ableitung der TMutter (oder von TKind) gibt?
In diesem Fall würde automatisch die von TMutter aufgerufen.
Da sie ja nicht mit reintreduce überschrieben wurde.

3. Wenn die Mutter wissen muss, das es genau das eine Kind gibt, wozu dann zwei Klassen?
Das ist die Schwachstelle. Dann wird es umständlich.
Delphi-Quellcode:
...
  if Self is TLieblingsKind then
  begin
   (Self as TLieblingsKind).b
  end
  else
  begin
    if Self is TStiefKind then
    begin
      (Self as TStiefKind).b
    end
    else
    begin
      // Mutterschaftstest durchführen.

      // Den Vorteil, den Mütter haben ist,
      // das sie in der Regel wissen, dass es ihre Kinder sind.
    end;
  end;
...
Aber wahrscheinlich gibt es dafür auch einen einfacheren Weg.

Fakt ist, das die Mutter alle Kinder (und Kindes-Kinder), die eine Sonderbehandlung benötigen, kennen muss.
Das icht schlecht.
Das ist bei der internal_proc Lösung nicht der Fall.

Mach es so, wie Uwe vorgeschlagen hat. Die Mutter ruft entweder explizit die eigene Methode oder aber die virtuelle Methode auf. So ist es OOP-konform und auch sauber.
Ich habe es wie Uwe gemacht.
Wenn du meine Texte gelesen hättest, wüsstest Du wie ich darüber denke.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat