Einzelnen Beitrag anzeigen

Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Final-Methoden zwar nicht überschreibbar, aber verdeckbar?

  Alt 23. Apr 2013, 16:16
Überdecken ist etwas ganz anderes als überschrieben!
beim Überdecken gibt es in der neuen Klasse eine Methode, die so heißt. D.H. du brauchst eine Referenz vom Typen deiner neuen Klasse, um diese Methode aufrufen zu können.
Der Sinn von virtuellen Methoden ist aber, dass du mit einer Referenz vom Typen der Klasse, die diese Methode zum ersten Mal deklariert, die speziellen Implementierungen der Nachfahren aufrufen kannst:

Delphi-Quellcode:
type
  A = class
  public
    function Miep : Integer; virtual; abstract;
  end;

  B = class(A)
  public
    function Miep : Integer; override; // returns 1
  end;

  C = class(A)
  public
    function Miep : Integer; override; final; // returns 2
  end;

  D = class(C)
  public
    function Miep : Inteher; // returns 3
  end;
Im letzten Beispiel siehst du trotzdem 2, nicht 3. Denn hier gelten nur die Methoden, die bereits in A deklariert sind.
Durch überschreiben können Nachfolger ihren Code an der Stelle ausführen lassen. Überdeckende Methoden sind einfach andere methoden und bekommen einen anderen Slot in der VMT.
Delphi-Quellcode:
var
  a : A;
  d : D;
begin
  a := B.Create();
  WriteLn(a.Miep()); // 1
  a := C.Create();
  WriteLn(a.Miep()); // 2
  a := D.Create();
  WriteLn(a.Miep()); // 2!
  d := D.Create();
  WriteLn(d.Miep()); // 3
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat