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.