Static Binding Vs Dynamic (late) Binding of methods in Delphi - ablealias/Delphi GitHub Wiki

An ordinary method is called a static method, because the compiler binds the method call directly to a method implementation. In other words, binding is static.

A virtual method is a method that is bind at runtime instead of at compile time. At compile time, Delphi used the declared type of an object reference to determine which methods you're allowed to call. Instead of direct compiling a direct reference to any specific method, the compiler stores an indirect method reference that depends on the object's actual class. At runtime, Delphi looks up the method in the class's runtime tables (specifically, the Virtual Method Table), and calls the method for actual class. The object's true class might be the compile time declared class or it might be a derived class, it doesn't matter because of the VMT provides the pointer to the correct method.