The class of an object determines how it will be treated by what are known as generic functions. Put the other way round, a generic function performs a task or action on its arguments specific to the class of the argument itself. If the argument lacks any class attribute, or has a class not catered for specifically by the generic function in question, there is always a default action provided.
An example makes things clearer. In a sense the print() function has always been generic, since its action is to adopt a style of output appropriate to its arguments. Thus a matrix appears as a matrix, a vector as a vector, and so on. (Note that the print() function can be called explicitly, or implicitly by giving an expression as a complete command.)
The August 1991 release of S-PLUS increases the number of such functions, alters the mechanism by which they are implemented and via the class mechanism offers the user the facility of designing and writing generic functions for special purposes. Among the other new, or newly generic functions are plot() for displaying objects graphically, summary() for summarising analyses of various types, and anova() for comparing statistical models.
The number of generic functions that can treat a class in a specific way can be quite large. For example, the functions that can accommodate in some fashion objects of class data.frame include

A currently complete list can be got by using the methods() function:
methods(class="data.frame")
Conversely the number of classes a generic function can handle can also be quite large. For example the plot() function has variants for classes of object

and perhaps more. A complete list can be got again by using the methods() function:
methods(plot)
The reader is referred to the official references for a complete discussion of this mechanism.