This came with TurboVision:
Language Guide, Borland Pascal With Objects, p37
<quote>
Virtual methods
By default, methods are "static". With the exception of constructor methods, they can be made "virtual" by including a virtual directive in the method declaration. The compliler resolves calls to static methods at compile time. Calls to virtual methods are resolved at run time; this is known as "late binding".
If an object type declares or inherits any virtual methods, then variables of that type must be "initialized" through a constructor call before any call to a virtual method. Therefore, any object type that declares or inherits any virtual methods must also declare or inherit at least one constructor method.
An object type can "override" (redefine) any of the methods it inherits from its ancestors. If a method declaration in a descendant specifies the same method identifier as a method declaration in an ancestor, then the declaration in the descendant overides the declaration in the ancestor. The scope of an overide method extends over the domain of the descendant in which it's introduced, or until the method identifier is again overridden.
An override of a static method is free to change the method heading any way it pleases. In contrast, an override of a virtual method must match exactly the order, types, and names of the parameters, and the type of the function result, if any. The override must again include a virtual directive.
<end quote>
note: words in quotes were written in italic.
Hope this helps, Russ