Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Reintroduce / Override bei Virtual / Dynamic im Bezug auf OOP - Prinzipien (https://www.delphipraxis.net/166754-reintroduce-override-bei-virtual-dynamic-im-bezug-auf-oop-prinzipien.html)

DeddyH 28. Feb 2012 13:42

AW: Reintroduce / Override bei Virtual / Dynamic im Bezug auf OOP - Prinzipien
 
So ganz hast Du es anscheinend noch nicht.
- virtual /dynamic -> kann überschrieben werden
- abstract -> muss überschrieben werden
- override -> wird überschrieben
- overload -> neue Methode gleichen Namens mit abweichender Signatur
- reintroduce -> wird "neu eingeführt" und hat nichts mit der übergeordneten Klasse zu tun

Jonas Shinaniganz 28. Feb 2012 13:52

AW: Reintroduce / Override bei Virtual / Dynamic im Bezug auf OOP - Prinzipien
 
Wieso hat denn reintroduce nichts mit der übergeordneten Klasse zu tun?

Wenn ich die Vererbte Klasse als Element der Basisklasse betrachte und virtual / reintroduce in den entsprechenden Klassen verwendet habe Also: TPapa(Sohn).say;

Dann wird die Funktion der Basisklasse aufgerufen obwohl es sich um eine Instanz der vererbten Klasse handelt?

Wenn Ich override benutzt habe, dann haben die Klassen nichts mehr miteinander zu tun, weil ich die Elternmethode überschreibe...

Die anderen Begrifflichkeiten habe Ich genauso verstanden wie du es aufgeschrieben hast.

DeddyH 28. Feb 2012 13:56

AW: Reintroduce / Override bei Virtual / Dynamic im Bezug auf OOP - Prinzipien
 
Lass doch mal Dein komisches Typecasting weg. Reintroduce unterdrückt wie schon weiter vorn gesagt die Warnung, wenn eine Methode verdeckt wird. Verdecken wiederum bedeutet ja, dass ich so tue, als gäbe es die Methode in der übergeordneten Klasse gar nicht.

Jonas Shinaniganz 28. Feb 2012 14:04

AW: Reintroduce / Override bei Virtual / Dynamic im Bezug auf OOP - Prinzipien
 
Gut dann noch kurz eine Frage, gibt es einen Unterschied zwischen verdecken und überschreiben?
:) Ich weiß deine Geduld zu schätzen

Jonas Shinaniganz 28. Feb 2012 14:07

AW: Reintroduce / Override bei Virtual / Dynamic im Bezug auf OOP - Prinzipien
 
Ich würde jetzt halt noch gerne wissen bei welchem Aufruf / Fall der unterschied deutlich wird und mir fällt nichts außer dem typecast ein...

Stevie 28. Feb 2012 14:21

AW: Reintroduce / Override bei Virtual / Dynamic im Bezug auf OOP - Prinzipien
 
Das Stichwort heißt Polymorphie

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

type
  TFoo = class
    procedure Something; virtual;
  end;

  TBar = class(TFoo)
    procedure Something; override;
  end;

procedure TFoo.Something;
begin
  Writeln('TFoo.Something');
end;

procedure TBar.Something;
begin
  Writeln('TBar.Something');
end;

var
  foo: TFoo;
begin
  foo := TBar.Create;
  foo.Something; // Ausgabe bei override: TBar.Something - Ausgabe bei reintroduce: TFoo.Something;
  Readln;
end.

DeddyH 28. Feb 2012 14:25

AW: Reintroduce / Override bei Virtual / Dynamic im Bezug auf OOP - Prinzipien
 
Ja. Schau Dir einmal dieses Beispiel an:
Delphi-Quellcode:
type
  TSomeClass = class
  protected
    procedure DoSomethingVirtual; virtual;
    procedure DoSomething; virtual;
  end;

  TSomeOtherClass = class(TSomeClass)
  public
    procedure DoSomethingVirtual; override; //Überschreiben
    procedure DoSomething; reintroduce; //Verdecken
  end;

{ TSomeClass }

procedure TSomeClass.DoSomething;
begin
  ShowMessage('TSomeClass.DoSomething');
end;

procedure TSomeClass.DoSomethingVirtual;
begin
  ShowMessage('TSomeClass.DoSomethingVirtual');
end;

{ TSomeOtherClass }

procedure TSomeOtherClass.DoSomething;
begin
  ShowMessage('TSomeOtherClass.DoSomething');
end;

procedure TSomeOtherClass.DoSomethingVirtual;
begin
  inherited;
  ShowMessage('TSomeOtherClass.DoSomethingVirtual');
end;

procedure TForm14.Button1Click(Sender: TObject);
var
  aClass: TSomeClass; //Variable vom Typ der Elternklasse
begin
  //Instanz der Kindklasse anlegen
  aClass := TSomeOtherClass.Create;
  try
    //Methode der Kindklasse wird aufgerufen
    aClass.DoSomethingVirtual;
    //Methode der Elternklasse wird aufgerufen
    aClass.DoSomething;
  finally
    aClass.Free;
  end;
end;
Siehe dazu auch http://docwiki.embarcadero.com/RADSt..._und_Verdecken

[edit] Kein roter Kasten [/edit]

Jonas Shinaniganz 29. Feb 2012 09:56

AW: Reintroduce / Override bei Virtual / Dynamic im Bezug auf OOP - Prinzipien
 
Bleibt noch zu sagen: Danke für die ganze Unterstützung. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:45 Uhr.
Seite 3 von 3     123   

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