The property of object-oriented programming
languages where the code executed to perform a given operation is determined at run time
from the class
of the operand(s) (the receiver of the message).
There may be several different classes of objects which can receive a given message.
An expression may denote an object which may have more than one possible class and that class can only be determined at run time.
New classes may be created that can receive a particular message, without changing (or recompiling) the code which sends the message.
An class may be created that can receive any set of existing messages.
implements dynamic binding using "virtual member functions".
One important reason for having dynamic binding is that it provides a mechanism for selecting between alternatives which is arguably more robust than explicit selection by conditionals or pattern matching
When a new subclass
is added, or an existing subclass changes, the necessary modifications are localised: you don't have incomplete conditionals and broken patterns scattered all over the program.