The abstract class Comparable from Exercise 3.12 should definitely be
an interface instead:

/**
 * Comparable objects support a meaning for ordered comparisons with
 * other objects of the same class.
 */
interface Comparable {
    /**
     * Compare this object with another; return a negative integer if this
     * object is less than the supplied object, zero if the two objects
     * are equal, and a positive number if this object is greater.
     */
    int compare(Comparable obj);
}

This way, classes that want to support sorting do not need to have
some superclass that extends the Comparable class; such a class can
extend any other class and just implement the Comparable interface as
well.  The rest of the solution to Exercise 3.12 need not change.
