Зачем нужны виртуальные методы, если при помощи inherited можно обратиться к одноименному методу родительского класса, даже если он не виртуальный?
TA = class
function get(): String;
end;
TB = class(TA)
function get(): String;
end;
...
function TA.get(): String;
begin
result := 'a';
end;
function TB.get(): String;
begin
result := inherited;
//result := 'b';
end;
...
showMessage(b.get());//Возвращает "a"