The ability to leave parts of a type in a typed language unspecified. The term has three distinct uses:
* Parametric polymorphism refers to the use of type variables in a strongly typed language.
* Overloading, sometimes called ad-hoc polymorphism, means using the same syntax for different types.
* object-oriented polymorphism allows a variable to refer to objects whose class is not known at compile time.