Zitat von
changlee:
Offenbar geht es ja aber auch ohne virtual.
Du hast damit die Methode nicht überschrieben, du hast nur eine Methode eingeführt, die genau so heisst.
Überschriebene Methoden stehen in der Virtuelen Methoden Tabelle, womit es möglich ist, immer die zum Objekttyp passende Methode aufzurufen :
Delphi-Quellcode:
Type
Klasse1 : Class
Meth1( Bla : Integer);
end;
Klasse2 : Class(Klasse1)
Meth1 ( Bla : Integer);
end;
Procedure TuWas( Obj : Klasse1);
Begin
Obj.Meth1(42);
end;
Procedure Test;
begin
TuWas(InstanzVonKlasse1);// Tut, wie es tuen soll
TuWas(InstanzVonKlasse2);// Tut nicht, es wird die Methode Meth1 von Klasse1 !! Ausgeführt
end;
Bei Vererbung :
Delphi-Quellcode:
Type
Klasse1 : Class
Meth1( Bla : Integer);Virtual;
end;
Klasse2 : Class(Klasse1)
Meth1 ( Bla : Integer);Override;
end;
Procedure TuWas( Obj : Klasse1);
Begin
Obj.Meth1(42);
end;
Procedure Test;
begin
TuWas(InstanzVonKlasse1);// Tut, wie es tuen soll
TuWas(InstanzVonKlasse2);// Tut wie es tuen soll;
end;