The final method can be used on a virtual or dynamic (or overridden) method to indicate it can
no longer be overridden.
Given the following declarations:
type
TParent = class
procedure Test; virtual;
procedure TestFinal; virtual; final;
end;
TChild1 = class(TParent)
procedure test; override; final;
end;
The following declarations will result in compiler errors:
TChild2 = class(TChild1)
// Error: There is no method in an ancestor class to be overridden: "Test;"
procedure test; override;
end;
TChild3 = class(TParent)
procedure TestProcedure; override;
// Error: There is no method in an ancestor class to be overridden: "TestFinal;"
procedure TestFinal; override;
end;