Binding is the process of mapping a name to a unit of code.
Late binding means that we use the name, but defer the mapping. In other words, we create/mention the name first, and let some subsequent process handle the mapping of code to that name.
Now consider:
So, the short answer is: virtual
is a late binding instruction for the machine (runtime) whereas abstract
is the late binding instruction for the human (programmer)
In other words, virtual
means:
“Dear runtime, bind the appropriate code to this name by doing what you do best: searching”
Whereas abstract
means:
“Dear programmer, please bind the appropriate code to this name by doing what you do best: inventing”
For the sake of completeness, overloading means:
“Dear compiler, bind the appropriate code to this name by doing what you do best: sorting”.