Introduction to OOP: Chapter 14 : Polymorphism
We have noted already how a variable declared as an instance of one
class can, in fact, hold a value from a subclass type.
Dynamic (run-time) type must be subclass of static (declared) type.
In C++ only works with pointers and references.
In Java can be formed from class or interface types.
The polymorphic variable (or value) is basis for much of the power of OOP.