Przeładowywanie metod


Metody można redeklarować poprzez użycie dyrektywy overload (przeładowanie). Jeśli redeklarowana metoda ma inną listę parametrów formalnych niż jej przodek, pokrywa ona dziedziczoną metodę bez ukrywania jej. Wywołanie metody w klasach potomnych aktywuje implementację z pasującą listą parametrów w wywołaniu.

Przeładowując metodę wirtualną, należy użyć dyrektywy reintroduce jeśli redeklaracja występuje w klasie potomnej. Przykład:

type
  T1 = class(TObject)
    procedure Test(I: Integer); overload; virtual;
  end;
  T2 = class(T1)
    procedure Test(S: string); reintroduce; overload;
  end;
   ...
  SomeObject := T2.Create;
  SomeObject.Test('Hello!');  // aktywuje T2.Test
  SomeObject.Test(7);         // aktywuje T1.Test

Wewnątrz klasy nie można opublikować wielu metod przeładowanych o takiej samej nazwie. Podtrzymywanie informacji o typie w czasie wykonywania programu (RTTI) wymaga unikalnej nazwy dla każdego opublikowanego składnika.

type
  TSomeClass = class
  published
    function Func(P: Integer): Integer;
    function Func(P: Boolean): Integer;  // błąd!!!
     ...

Implementacja Metody przeładowanej musi powtórzyć listę parametrów z deklaracji klasy.