Overriding is a special case of the more general concept of overloading. Overloading
allows the name of a method to be reused within a class definition or across class definitions.
This means that a single message can perform different functions depending on which
object receives it and, if appropriate, what parameters are passed to the method.
For example,
many classes will have a print method to print out the relevant details for an object, as
shown in Figure 25.8.