Conceptually, method dispatch is implemented by testing the object against the predicate word for every class, in linear order ( Class linearization ).

Here is an example:
GENERIC: explain ( object -- ) M: object explain drop "an object" print ; M: generic explain drop "a generic word" print ; M: class explain drop "a class word" print ;

The linear order is the following, from least-specific to most-specific:
{ object generic class }

Neither class nor generic are subclasses of each other, and their intersection is non-empty. Calling explain with a word on the stack that is both a class and a generic word will print a class word because class is more specific than generic in the class linearization order. (One example of a word which is both a class and a generic word is the class of classes, class, which is also a word to get the class of an object.)

The order word can be useful to clarify method dispatch order:
order ( generic -- seq )