= Solution
<Programming language polymorphism> means that one interface or program definition can be used with values of multiple types. In <object-oriented programming>, <subtype polymorphism> allows references with a common <static type> to denote instances of different concrete subclasses or implementers of a <trait>. An <object method> call uses <dynamic dispatch> to select the overriding implementation belonging to the receiver's <runtime type>. For example, different implementations of a playlist interface can respond to the same `insert` call without the client testing their concrete classes.
<Parametric polymorphism> uses <type parameters>, as in `Sequence[A]`, so the same definition works uniformly for songs, <integers>, or other elements. <Ad hoc polymorphism> includes <method overloading>, where different parameter signatures share a name and the <static types> determine overload selection. These mechanisms are distinct: selecting an overloaded signature is not the same step as dispatching an override of that selected signature. <Class inheritance> can supply implementations, but the reusable interface and legal <subtyping> relationship determine what a polymorphic client may do.
Back to article page