Of the remaining applicable methods, the system locates the one whose argument specializers are most specific, and invokes that method to respond to the message. A method specifies the kinds of arguments for which its code is designed to work. In the declaration above, the obji represent argument specializers. As indicated by the syntax above, argument specializers are distinct from type declarations. On the other hand, type declarations require that certain operations be supported by argument objects, but place no constraints on how those operations are implemented.
Type declarations have no effect on method lookup.
If zero arguments are specialized, the method acts like a conventional undispatched function or procedure. If only the first argument is specialized, the method acts like a normal singly-dispatched method in a language such as Smalltalk. Callers which send a particular message to a group of arguments need not be aware of the collection of methods that might handle the message or which arguments of the methods are specialized, if any. Methods may be overloaded, i.e., there may be many methods with the same name, as long as the methods with the same name and number of arguments differ in their argument specializers. Methods and objects are effectively connected through the methods' argument specializers.