Thema: Delphi virtual und override

Einzelnen Beitrag anzeigen

tommie-lie
(Gast)

n/a Beiträge
 
#5

Re: virtual und override

  Alt 13. Sep 2005, 16:35
Zitat von Hador:
1. Warum eine Variable vom Typ xy Definieren, wenn Der Variable der Typ yz zugewiesen wird.
Stell dir vor du sammelst daten in Objekten. Die Daten haben alle eine ähnliche Struktur, unterscheiden sich aber doch in rgendetwas. Also schreibst du eine Vaterklasse und leitest davon deine Klassen ab. Jetzt kriegst du einen Datenstrom mit 100 Datensätzen und willst die irgendwo unterbringen. Also kannst du ein Array der Vaterklasse erzeugen und kannst in dieses Array lauter Objekte der Kindklasse stecken, obwohl das Array eigentlich vom Typ der Vaterklasse ist. Zur Laufzeit schaust du dann, von welcher Art der aktuelle datensatz ist und erzeugst entsprechend das richtige Objekt. Würdest du für jede Art von Datensatz ein eigenes Array des richtigen Typs vorhalten, kann es unübersichtlich werden.

Zitat von Hador:
2. Warum kann ich der Variable vom Typ xy ein Objekt vom Typ yz zuweisen.
Weil Klassen in einer Hierarchie nach oben zuweisungskompatibel sind. Du kannst also einer Variable einer Vaterklasse immer ein Objekt einer abgeleiteten Klasse übergeben, egal die wievieilte Ableitung es ist. Beispielsweise kann eine Variable vom Typ TControl alle Controls der VCL beinhalten, von Memo bis Button, weil alle VCL-Controls von TControl abgeleitet sind, obwohl bei einigen noch Klassen dazwischenliegen (z.B. TWinControl, TCustomMemo, etc).

Zitat von Hador:
Andersherum währe es ja noch zu verstenen, denn yz beinhaltet ja xy aber xy ist doch nur ein Teil von yz.
Eben deswegen geht es.
Weil xy nur ein Teil von yz ist, kansnt du ein Objekt von yz einer Variable vom Typ xy zuweisen, weil der Compiler sicher sein kann, daß alles, was über die Variable zugänglich ist (an Feldern und Methoden) auch in dem Objekt von yz existieren. Andersrum hätte man die Klasse yz gegenüber xy erweitern können. Weise ich jetzt einer Variable vom Typ yz ein Objekt vom Typ xy zu, ist nicht der gesamte Speicher, den ich durch die Variable zugreifen kann, allokiert, weil ja die Klasse yz größer ist als xy.
  Mit Zitat antworten Zitat