As far a as my understanding goes:
Multimethods are a generalization of method polymorphism.
A multimethod consists of 2 parts
A name
A
dispatch method
: which will produce adispatch value
OverloadingBased on this dispatch value, the appropriate method will be chosen. Overloading is a special case of multimethods where the dispatch method will return the static type as a dispatch value
In general, the dispatch method can be anything. It can return other values than the type.