Polymorphism
In plain terms
One interface or name behaving differently depending on the underlying type.
Going deeper
In object-oriented code, a single method call like draw() can do the right thing whether the object is a circle or a square, because each type supplies its own implementation. It lets you write general code that works across many specific types.
Under the hood
Includes subtype (overriding), parametric (generics), and ad-hoc (overloading) forms; dynamic dispatch resolves the right method at runtime via vtables in compiled languages.
Examples
A shape.draw() call on Circle vs. Square; generic List<T>; operator overloading.
Think of it like...
Like the word 'play': you play a guitar, a sport, or a movie, the same verb, but the actual action depends entirely on the object it's paired with.