Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Abstrakte Klasse mit implementierten Methoden (https://www.delphipraxis.net/97041-abstrakte-klasse-mit-implementierten-methoden.html)

Nogge 3. Aug 2007 11:32


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

mkinzler 3. Aug 2007 11:35

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.

Phoenix 3. Aug 2007 11:37

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.

jbg 3. Aug 2007 12:41

Re: Abstrakte Klasse mit implementierten Methoden
 
Zitat:

Zitat von mkinzler
In Delphi gibt es eigentlich keine abstrakte Klassen, sondern nur Klassen mit abstrakten Methoden.

Die gibt es schon (seit Delphi 2006)
Delphi-Quellcode:
type
  TMyAbstractClass = class abstract(TMyBase)
  end;
Nur lässt dich der Compiler immernoch eine Instanz dieser Klasse (mit Warnung) erzeugen.

Elvis 3. Aug 2007 12:56

Re: Abstrakte Klasse mit implementierten Methoden
 
Zitat:

Zitat von jbg
Die gibt es schon (seit Delphi 2006)
Delphi-Quellcode:
type
  TMyAbstractClass = class abstract(TMyBase)
  end;

D'Oh! :wall:
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:

xaromz 3. Aug 2007 13:01

Re: Abstrakte Klasse mit implementierten Methoden
 
Hallo,
Zitat:

Zitat von Elvis
Wer kommt schon auf die Idee es verkehrtrum zu schreiben... :gruebel:

in Delphi werden Modifier doch immer hinten ran gestellt. Ich hätte allerdings eher sowas erwartet:
Delphi-Quellcode:
type
  TMyAbstractClass = class(TMyBase)
  end abstract;
Gruß
xaromz

Nogge 3. Aug 2007 13:04

Re: Abstrakte Klasse mit implementierten Methoden
 
Und ich habe kein Delphi 2006, wie Ihr vllt seht... :(

Phoenix 3. Aug 2007 13:23

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 :)

Nogge 3. Aug 2007 13:26

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.

Elvis 3. Aug 2007 14:21

Re: Abstrakte Klasse mit implementierten Methoden
 
Zitat:

Zitat von Nogge
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.

Konstruktoren sind in Delphi komische Viecher.
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:
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);
Einen Konstruktor als Instanzmethode auszuführen ohne die Instanz vorher angelegt zu haben knallt natürlich...


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz