Hallo!
Ich arbeite mich gerade etwas in die Objektorientierung ein und bin meinen Versuchen darauf gestoßen, dass folgendes möglich ist:
Delphi-Quellcode:
TClass1 = class(TObject)
private
FTest: boolean;
public
constructor Create; virtual;
property Test: boolean read FTest write FTest;
end;
TClass2 = class(TClass1)
private
FTest: string;
public
constructor Create; virtual;
property Test: string read FTest write FTest;
end;
Class2 ist also eine Unterklasse von Class1 und überschreibt den Datentyp des Feldes FTest sowie der zugehörigen Eigenschaft Test von boolean zu string.
Damit ist Class2 doch eigentlich keine Unterklasse von Class1 mehr, denn man kann ein Class1-Objekt nicht durch ein Class2-Objekt ersetzen. z.B. Hier:
Delphi-Quellcode:
var c1: TClass1;
c2: TClass2;
begin
c1 := TClass1.Create;
c2 := TClass2.Create;
c1.Test := true;
c2.Test := 'test';
if c1.Test then showMessage('Wahr')
else showMessage('Falsch');
if c2.Test then showMessage('Wahr') // kann nicht compiliert werden, da Test kein Boolean
else showMessage('Falsch');
c1 := c2;
if c1.Test then showMessage('Wahr') // Liefer falsch
else showMessage('Falsch');
end;
Man kann c2 also nicht im gleichen Coder verwenden wie c1 (in der If-Abfrage). Trotzdem kann man c1 c2 zuweisen...
Wäre es nicht "objektorientiert", wenn man den Typ eines Feldes in einer Unterklasse nicht ändern könnte? Bzw nur FTest: TTest1 durch FTest: TTest2 überschreiben kann wenn TTest2 eine Unterklasse von TTest1 ist?
Vielen Dank für eure Meinung hierzu!
Ares