Yes, except dispatch happens at runtime, not compile time. It takes into account the dynamic type of each argument, not just their static types.
(The fact that you can have static dispatch on dynamic types is a pretty subtle point that hurts my head, but the upshot is that you get semantically dynamic dispatch with static performance as an optimization.)