That is method overloading, which isn't the same as multi-dispatch.
EDIT: to make it even more obvious there's no difference:
class Fire{}
class Water {}
class Grass {}
class Ice {}
def eff(Fire f, Grass g) { 'burn' }
def eff(Fire f, Ice ice) { 'melt' }
def eff(Water w, Grass g) { 'grow' }
def eff(Water w, Ice ice) { 'freeze' }
def eff(a, b) { 'undefined' }
// hide compile-time types
Object fire = new Fire()
Object grass = new Grass()
Object ice = new Ice()
Object water = new Water()
println eff(fire, grass)
println eff(fire, ice)
println eff(water, grass)
println eff(water, ice)
println eff(ice, water)
Prints: burn
melt
grow
freeze
undefined