"NumberExample" contains the main method for this program. This example illustrates the use of abstract classes. An abstract class can include method signature definitions which do not contain any code. Classes which extend the abstract class must supply an appopriate definition. In this example note how the abstract Number superclass defines an "add" method that operates on any two instances of "Number". This means that implementations (for example in "Integer") must be aware of all of the possible kinds of number as well as just their own kind. For example, the "Integer" class needs to contain code for adding a "Real" to an "Integer" as well as for adding two "Integers". Similar examples are seen in the standard Java libraries in (e.g.) the "equals" method on java.lang.Object.