public abstract class Employee implements Comparable { //Class Constants public static final double MINIMUM_WAGE = 10.00; //Guaranteed minimum hourly wage public static final int WORK_WEEK_HOURS = 40; //Expected maximum hours in a work week public static final int WORK_DAY_HOURS = 10; //Expected maximum hours in a work day //Instance Variables private final String number; //ID number private double payRate; //Pay-rate //Constructor public Employee(double payRate) { this.number = newNumber(); this.payRate = payRate; } //Accessor public String getNumber() { return this.number; } //Accessor public double getPayRate() { return this.payRate; } //For implementation in subclasses public abstract double grossPay(); //Override public String toString() { return this.getClass().getName() + " " + this.number + " Pay Rate $" + this.payRate ; } //Override public boolean equals(Object other) { if (other == null || this.getClass() != other.getClass()) return false; Employee that = (Employee)other; return this.number.equals(that.number) && this.payRate == that.payRate; } //Helper: Create unique Employee number in the form x-xxx-xxx private static int nextNumber = 7000000; private static String newNumber() { String number = "" + (++nextNumber); return number.substring(0, 1) + "-" + number.substring(1, 4) + "-" + number.substring(4); } //Overide to implement Comparable interface public int compareTo(Object other) { return this.number.compareTo( ((Employee)other).number ); } }