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.