![]() |
Abstrakte Klasse mit implementierten Methoden
Hallo Community,
In Java gibt's abstrakte Klassen, die man nicht direkt erstellen kann. Erst durch's Erstellen einer normalen Klasse, die die abstrakte Klasse erweitert, ist es möglich, auf die Methoden und Attribute der abstrakten Klassen zuzugreifen. Interfaces erlauben nur public-Zugriffsrechte und sind dafür auch nicht gedacht. Kann mir jemand sagen, wie dies in Delphi zu realisieren ist? mfg nogge |
Re: Abstrakte Klasse mit implementierten Methoden
In Delphi gibt es eigentlich keine abstrakte Klassen, sondern nur Klassen mit abstrakten Methoden. man kann also Instanzen erzeugen und auch auf die nicht-abstrakten Methoden zugreifen.
|
Re: Abstrakte Klasse mit implementierten Methoden
Hrm. Deklariere doch einfach den Constructor als Abstrakt ;-)
Ansonsten bleibt Dir nichts über, als Methoden die Du eben nicht implementierst als Abstrakt zu setzen. |
Re: Abstrakte Klasse mit implementierten Methoden
Zitat:
Delphi-Quellcode:
Nur lässt dich der Compiler immernoch eine Instanz dieser Klasse (mit Warnung) erzeugen.
type
TMyAbstractClass = class abstract(TMyBase) end; |
Re: Abstrakte Klasse mit implementierten Methoden
Zitat:
Ich hatte es mit "abstract class" probiert und dann angenommen, dass es einfach immer noch nicht geht. Wer kommt schon auf die Idee es verkehrtrum zu schreiben... :gruebel: |
Re: Abstrakte Klasse mit implementierten Methoden
Hallo,
Zitat:
Delphi-Quellcode:
Gruß
type
TMyAbstractClass = class(TMyBase) end abstract; xaromz |
Re: Abstrakte Klasse mit implementierten Methoden
Und ich habe kein Delphi 2006, wie Ihr vllt seht... :(
|
Re: Abstrakte Klasse mit implementierten Methoden
Wie gesagt: deklariere den constructor als abstrakt. Ich habs jetzt nicht ausprobiert, aber das dürfte dazu führen dass die Klasse selber nicht mehr instanziert werden kann :)
|
Re: Abstrakte Klasse mit implementierten Methoden
Aso, vergessen zu erwähnen: Man kann den Konstruktor dann zwar nicht mehr mit nem "." auswählen, allerdings akzeptiert der Compiler <Instance>.Create() als ganzes.
|
Re: Abstrakte Klasse mit implementierten Methoden
Zitat:
Du kannst sie als Class methods ausführen: Also Deineklasse.Create; aber auch als Instance methods. Im ersten Fall wird eine neue Instanz angelegt, im zweiten Fall wird der Initialisierungs-Code des Konstruktors auf die Instanz ausgeführt.
Delphi-Quellcode:
Einen Konstruktor als Instanzmethode auszuführen ohne die Instanz vorher angelegt zu haben knallt natürlich...
type
TSomeClass = class public Hiho : Integer; constructor Create; end; constructor TSomeClass.Create; begin Hiho := 2; end; var obj : TSomeClass; begin obj := TSomeClass.Create(); obj.Hiho := 1; obj.Create(); // geht und wiederholt was immer Create mit der Instanz gemacht hat Writeln(obj.Hiho); |
Re: Abstrakte Klasse mit implementierten Methoden
Zitat:
Der Compiler sowie die Entwicklungsumgebung akzeptieren sowohl <class>.Create() als auch <instance>.Create(). Das einzige, was sich durch einen abstrakten Konstruktor verändert, ist die Anzeige des Compilers, wenn man der Unterklasse TTest von TNonVCLThread erben lässt: Zitat:
|
Re: Abstrakte Klasse mit implementierten Methoden
Delphi-Quellcode:
type
TMyAbstractClass = class abstract(TMyBase) end; für was verwendet man das? in der Hilfe steht was von: " Ist eine Klasse als abstract markiert, dann kann sie nicht direkt mit dem Konstruktor Create instantiiert werden." aber irgendwie geht das bei mir trotzdem. Vielen Dank! |
Re: Abstrakte Klasse mit implementierten Methoden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:47 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-2025 by Thomas Breitkreuz