![]() |
OO Frage: Warum kann Unterklasse Var-Typ ändern?
Hallo!
Ich arbeite mich gerade etwas in die Objektorientierung ein und bin meinen Versuchen darauf gestoßen, dass folgendes möglich ist:
Delphi-Quellcode:
Class2 ist also eine Unterklasse von Class1 und überschreibt den Datentyp des Feldes FTest sowie der zugehörigen Eigenschaft Test von boolean zu string.
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; 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:
Man kann c2 also nicht im gleichen Coder verwenden wie c1 (in der If-Abfrage). Trotzdem kann man c1 c2 zuweisen...
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; 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 |
Re: OO Frage: Warum kann Unterklasse Var-Typ ändern?
Das Feld wird nur verdeckt. Du kannst nämlich schreiben:
Delphi-Quellcode:
Du hast in TClass2 also zwei gerschiedene Variablen mit dem gleichen Namen.
if TClass1(c2).Test then showMessage('Wahr')
else showMessage('Falsch'); |
Re: OO Frage: Warum kann Unterklasse Var-Typ ändern?
Ich stimme Ares zu, solche Fehlerquellen sollte eine Sprache eigentlich nicht erlauben.
edit: I spel gud |
Re: OO Frage: Warum kann Unterklasse Var-Typ ändern?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz