jaenicke hat folgendes geschrieben : |
| Entweder muss die Variable den Typ der Oberklasse oder des Interfaces haben, je nachdem wie du es implementierst. Und natürlich musst du auch override und nicht overload benutzen, sonst überschreibst du die abstrakte Klasse nicht, und dann gibt es natürlich einen Fehler. |
Ok. Dann nehmen wir mal dieses Beispiel:
TMatheObjekt=Class(TObject)
private
sig:string;
public
procedure Add(s:TMatheObjekt); virtual;abstract;
...
end;
TKomplex = Class(TMatheObjekt)
private
re,im:Extended;
public
procedure Add(s:TKomplex); override;
end;
Das mag der Compiler nicht: [Fehler] Unit1.pas(93): Deklaration von 'Add' unterscheidet sich von vorheriger Deklaration.
Wenn ich jedoch in der abgeleiteten Klasse
procedure Add(s:TMatheObjekt); override;
schreibe, dann kennt die überschriebene Prozedur Add bei der Implementierung die Variablen re und im nicht mehr.