"SortExample" contains the main method for this program. This example shows how interface definitions can be used to define groups of method signatures that particular classes will be required to implement. In this case an interface "Sortable" is defined. Any class implementing the interface has to provide a comparison method -- in this case we build on the previous example with "Real" and "Integer" being set to be sortable, as well as a new "SortableInt" class. Note how, as with the "abstract-classes" example, the comparison method has to accept any "Sortable" object as its parameter. This means that the implementations typically have to start by examining what they have received and testing whether it is comparable to them -- for example, if a "SortableColour" class were to be defined (say in rainbow order) then you'd expect that the implementation in "SortableInt" would raise an exception if a colour was being compared to an integer.