Wie ist es möglich in TMutter.a TMutter.b aufzurufen, obwohl in TMutter ein TKind steckt?
Eigentlich stimmt hier dein Design nicht mehr. Es mag andere Ansätze geben, aber ich löse das meistens so:
Delphi-Quellcode:
TMutter = class(TObject)
protected
procedure InternalB;
public
procedure a(x: Boolean); virtual;
procedure b; virtual;
end;
procedure TMutter.a(x: Boolean);
begin
Log('TMutter.a1');
if x then
begin
// b aufrufen. (Wenn Self = TKind ist, dann wird TKind.b aufgerufen.)
b;
end
else
begin
// Hier sollte immer TMutter.b aufgerufen werden!!!
InternalB;
end;
Log('TMutter.a2');
end;
procedure TMutter.InternalB;
begin
Log('TMutter.b');
end;
procedure TMutter.b;
begin
InternalB;
end;