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.