Classes I: Instance variables, methods (get and set methods, constructors); data abstraction; public, private access; class variables, methods.
Hourly Employee:
// HourlyEmployee.javapublic class HourlyEmployee { String lastName; String firstName; Double hourlyRate; public HourlyEmployee(String last, String first, double rate) { this.lastName = last; this.firstName = first; this.hourlyRate = rate; } public String toString() { return (String.format("%s, %s %.2f", this.lastName, this.firstName, this.hourlyRate)); }}// -------------------------- File HourlyEmployee.java ---------------------// HourlyEmployee.javapublic class HourlyEmployee { static int numberOfEmployees; private String lastName; private String firstName; private Double hourlyRate; private int employeeID; public HourlyEmployee(String last, String first, double rate) { lastName = last; firstName = first; hourlyRate = rate; employeeID = numberOfEmployees++; } public String toString() { return (String.format("%05d %s, %s $%.2f per hour", employeeID, lastName, firstName, hourlyRate)); }}// -------------------------- File HourlyEmployeeTest.java ---------------------import java.util.Scanner;public class HourlyEmployeeTest { static final int NUMBER_OFFICES = 20; static HourlyEmployee hourlyEmployees[] = new HourlyEmployee[NUMBER_OFFICES]; static Scanner input = new Scanner(System.in); static boolean hiring = true; public static void main(String[] args) { for (int i = 0; i < NUMBER_OFFICES; i++) if (!hire(i)) break; for (int i = 0; i < HourlyEmployee.numberOfEmployees; i++) System.out.println(hourlyEmployees[i].toString()); } public static boolean hire(int i) { System.out.print("Enter Employee's First Name: "); String first = input.next(); if (first.equals("Q")) return false; System.out.print("Enter Employee's Last Name: "); String last = input.next(); System.out.print("Enter Employee's Hourly Rate: "); double rate = input.nextDouble(); hourlyEmployees[i] = new HourlyEmployee(last, first, rate); return true; }}