Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Von abstrakten Methoden erben


Venja Lojox - Di 16.02.10 15:54
Titel: Von abstrakten Methoden erben
Ich möchte für ein Projekt eine "abstrakte Klasse" erstellen. Sie nennt sich Zeichnung und ist von TObject abgeleitet
Die Methode Create ist hier nun abstrakt.

Nun will ich aber in der Unterklasse TLinie von diesem create ein TLinie.Create erben. dementsprechend bräuchte ich ja den aufruf
inherited Create

Nun ist aber ja das wovon ich erbe LEER, ich hab dort kein inherited create stehen.
Die Frage ist, ob ich dennoch die Prozedur von TObject erbe, die mich hier ja interessiert

also: kriege ich durch den inherited Aufruf die Festelgungen von TObject und wenn nicht, geht das überhaupt mit einer abstrakten Klasse, dass ich diese ""Vererbungsstruktur"" beibehalte?


martin300 - Di 16.02.10 17:41

Hallo,
Zitat:

Ich möchte für ein Projekt eine "abstrakte Klasse" erstellen. Sie nennt sich Zeichnung und ist von TObject abgeleitet.

In Delphi gibt es meiner Meinung nach keine abstrakte Klasse. Es gibt nur abstrakte Methoden oder ein Interface (siehe: http://www.delphi-treff.de/sprachen/object-pascal/interfaces/ ).
Ein Interface verhält sich ähnlich wie eine abstrakte Klasse.
Zitat:

Die Methode Create ist hier nun abstrakt.

Da es von TObject abgeleitet ist, gibt es auch den Konstruktur "create".


Venja Lojox - Di 16.02.10 18:36

Mir ist wohl klar, dass die Methode da ist. Wahrscheinlich habe ich es falsche formuliert. Ich habe jetzt doe Klassendefinition von


Delphi-Quelltext
1:
2:
3:
TZeichnung = class(TObject)
 constructor Create(....); virtualabstract;
 destructor Destroy; virtualabstract;

davon abgeleitet dann TLinie

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
TLinie = class(TZeichnung)
 constructor Create(...); override;
 destructor Destroy; override;
.
.
.
constructor TLinie.Create(...);
begin
 inherited Create(...);
 ...
end;

So, ich möchte nun wissen, ob ich durch DIESEN inherited Aufruf die Eigenschaft von TObject erbe, einen speicherplatz zu reserviere (oder was auch immer da weiter passiert), da ja Create in der Oberklasse LEER existiert
Oder anders: Erbe ich mit dem inherited überhaupt was?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


martin300 - Di 16.02.10 19:22

Am besten das ganze eingeben und mehrmals die F7 Taste drücken. Dann wirst du sehen das dieser Code so nicht funktioniert.

Delphi-Quelltext
1:
inherited Create(...);                    

ruft nur den Konstruktor des Vorgängers auf. Dein Vorgänger ist als

Delphi-Quelltext
1:
constructor Create(....); virtualabstract;                    

definiert. Was soll da Delphi machen? - Abstrakte Klassen gibt es nicht. Du musst es zulassen eine Instanz zu erzeugen - dann klappt es auch mit der Vererbung.