Einzelnen Beitrag anzeigen

Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

OO Frage: Warum kann Unterklasse Var-Typ ändern?

  Alt 10. Okt 2007, 15:05
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
  Mit Zitat antworten Zitat