Delphi позволяет нам использовать ДВЕ формы вызова родительского метода при помощи ключевого слова inherited.
С использованием имени метода:
procedure TSomeObject.Cleanup; // override
begin
SomeOwnCode;
inherited Cleanup;
end;
И без использования имени метода:
procedure TSomeObject.Cleanup; // override
begin
SomeOwnCode;
inherited;
end;
-- я лично при прочих равных - предпочитаю ВТОРУЮ форму.
Почему? Потому, что при активном рефакторинге и переименовании методов - она - УСТОЙЧИВЕЕ. Не надо бегать и синхронизировать имена методов.
Есть правда одна ЗАСАДА.
Если ВДРУГ написано так:
type
TA = class
protected
procedure Cleanup; virtual;
end;
TB = class(TA)
private
procedure Cleanup; override;
end;
TC = class(TB)
protected
procedure Cleanup; override;
end;
-- то при записи:
procedure TC.Cleanup; //override;
begin
SomeOwnCode;
inherited;
end;
Вызовется не тот метод, который мы ожидаем - TB.Cleanup, а метод TA.Cleanup. Хм.. (задумался)... Или НИЧЕГО не вызовет. Не помню. Склероз. Завтра - проверю.
Правда компилятор выдаст Warning о понижении видимости виртуального метода.
А при вызове:
procedure TC.Cleanup; //override;
begin
SomeOwnCode;
inherited Cleanup;
end;
-- нас обругает компилятор. Скажет - "не знаю такого метода в базовом классе".