As previously noted, if necessary, the compiler implicitly converts the operand types to match the operator's exact signature. Though Java specifies certain overloaded operators, it does not support user-defined overloading of operators. Java does permit user-defined overloading of method names. A class may possess multiple methods with the same name, provided that the method signatures are distinct. That means either the number of parameters must differ or at least one parameter position must have a different type.
Unique signatures allow the compiler to distinguish between methods that have the same name.
The compiler mangles the method names using the unique signatures, effectively creating unique names. In light of that, any apparent polymorphic behavior evaporates upon closer inspection. Both coercion and overloading are classified as ad hoc because each provides polymorphic behavior only in a limited sense. Though they fall under a broad definition of polymorphism, these varieties are primarily developer conveniences. Coercion obviates cumbersome explicit type casts or unnecessary compiler type errors.