= Solution
\b[<Subtype polymorphism>] lets a reference with a common supertype denote values of different implementing classes. A call through that reference uses <dynamic dispatch> to select the concrete implementation.
\b[<Parametric polymorphism>] defines an operation or data structure using <type parameters>, such as a collection with an element-type parameter. Instantiations retain type information while reusing one generic definition.
\b[<Ad hoc polymorphism>], commonly expressed by <method overloading>, gives several implementations the same name but different parameter signatures. The compiler selects a suitable overload using the available static types. This selection differs from later <dynamic dispatch> on the receiver of a selected <instance method>. A programming language can support all three in one program.
Back to article page