Until you add in existential types:
http://www.haskell.org/haskellwiki/Existential_type#Dynamic_dispatch_mechanism_of_OOP

If you buy into the essence of OOP—encapsulation, in the bundling of code and data sense—then dynamic dispatch is a beautiful thing.

Arguably, (or I will argue it) overloading should be stripped out of Java, Scala, etc. The interaction of overloading (static) with overriding (dynamic) is a minefield.