This document discusses different types of dispatch in object-oriented programming. It explains static dispatch, single dispatch, and multiple dispatch. Multiple dispatch allows method lookup to be based on the runtime classes of parameters rather than their static types. It can be emulated using the visitor pattern and resembles pattern matching. The document also lists advantages of multiple dispatch like natural interaction with overloading, but notes disadvantages like potential confusion and ambiguity due to the "diamond problem". It discusses how the CZ language implements multiple dispatch across inheritance hierarchies without diamonds.