Метод, который может или не может быть переопределен, не является абстрактным методом, это просто виртуальный .
Абстрактный метод - это метод, который не имеет базовой реализации и для которого реализация должна быть предоставлена потомком.
В вашем случае просто объявите их как virtual и предоставьте им реализацию по умолчанию NO-OP (Без операции), которую требует ваш дизайн:
type
TMyBaseClass = class
protected
procedure SomeProc; virtual;
end;
procedure TMyBaseClass.SomeProc;
begin
// NO-OP
end;
Примечание - это иллюстрирует мое личное соглашение о документировании преднамеренного НО-ОП, а не о том, чтобы просто оставить пустую реализацию.
Любые шеннаниганы, через которые вы проходите, пытаясь определить, был ли объявленный абстрактный метод переопределен или нет, и вызвать его - или нет - на основе этого теста, скорее всего, будут стоить больше времени, чем простой вызов реализации NO-OP. , Кроме того, если вам когда-либо понадобится внедрить реализацию в этом базовом классе, вам не нужно менять метод с абстрактного на неабстрактный (возможно, нарушая те схемы «обнаружения», которые были у вас в этом методе, и, конечно же, переводя их стоимость в ничто. но чисто накладные расходы).