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.