Not sure how to approach the two tasks i have been given below..can anyone tell me where I am going wrong or give me a pointer or two?


Modify the supplied payroll system to include private instance variable joinDate in class Employee to represent when they joined the company. Use the java.util.Date for this variable.
Use a static variable in the Employee class to help automatically assign each new employee a unique (incremental) id number.



Code:
// Abstract base class Employee.
import java.util.Date;
public abstract class Employee {

    private String firstName;
    private String lastName;
    public Date birthDate;
    // constructor
    public Employee(String first, String last, Date dateOfBirth) {
        firstName = first;
        lastName = last;
        birthDate = dateOfBirth;
    }

    // get first name
    public String getFirstName() {
        return firstName;
    }

    // get last name
    public String getLastName() {
        return lastName;
    }
    
    public void setBirthDate(Date dateOfBirth)
    {
 		birthDate = dateOfBirth;
    }
  
    public Date getBirthDate()
    {
 	   return birthDate;
    }
    
    
    public String toString() {
        return firstName + ' ' + lastName;// how can add dates to this without creating a type problem?
    }

    public abstract double earnings();
}
Code:
import java.util.Date;

// CommissionWorker class derived from Employee

public final class CommissionWorker extends Employee {

    private double salary; // base salary per week
    private double commission; // amount per item sold
    private int quantity; // total items sold for week

    // constructor for class CommissionWorker
    public CommissionWorker(String first, String last, Date dateOfBirth,
            double salary, double commission, int quantity) {
        super(first, last, dateOfBirth); // call superclass constructor
        setSalary(salary);
        setCommission(commission);
        setQuantity(quantity);
    }

    // set CommissionWorker's weekly base salary
    public void setSalary(double weeklySalary) {
        salary = (weeklySalary > 0 ? weeklySalary : 0);
    }

    // set CommissionWorker's commission
    public void setCommission(double itemCommission) {
        commission = (itemCommission > 0 ? itemCommission : 0);
    }

    // set CommissionWorker's quantity sold
    public void setQuantity(int totalSold) {
        quantity = (totalSold > 0 ? totalSold : 0);
    }

    // determine CommissionWorker's earnings
    public double earnings() {
        return salary + commission * quantity;
    }

    // get String representation of CommissionWorker's name
    public String toString() {
        return "Commission worker: " + super.toString();
    }
} // end class CommissionWorker
Code:
import java.util.Date;

// Boss class derived from Employee.

public final class Boss extends Employee {

    private double weeklySalary;

    // constructor for class Boss
    public Boss(String first, String last, double salary, Date dateOfBirth) {
        super(first, last, dateOfBirth); // call superclass constructor
        setWeeklySalary(salary);
    }

    // set Boss's salary
    public void setWeeklySalary(double salary) {
        weeklySalary = (salary > 0 ? salary : 0);
    }

    // get Boss's pay
    public double earnings() {
        return weeklySalary;
        
    }

    // get String representation of Boss's name
    public String toString() {
        return "Boss: " + super.toString();
    }
} // end class Boss
Code:
// Driver for Employee hierarchy

// Java core packages
import java.text.DecimalFormat;
import java.util.Date;

// Java extension packages
import javax.swing.JOptionPane;

public class Test {

    // test Employee hierarchy
    public static void main(String args[]) {
        Employee employee; // superclass reference
        String output = "";

        Boss boss = new Boss("John", "Smith",800.0,  new Date(8, 7,1979));

        CommissionWorker commissionWorker =
                new CommissionWorker("Sue", "Jones",new Date(8, 7,1979),400.0, 3.0, 150);

        PieceWorker pieceWorker =
                new PieceWorker("Bob", "Lewis",new Date(8, 7,1979),  2.5, 200);

        HourlyWorker hourlyWorker =
                new HourlyWorker("Karen", "Price",new Date(8, 7,1979),  13.75, 40);

        DecimalFormat precision2 = new DecimalFormat("0.00");

// Employee reference to a Boss
        employee = boss;

        output += employee.toString() + " earned $"
                + precision2.format(employee.earnings()) + "\n"
                + boss.toString() + " earned $"
                + precision2.format(boss.earnings()) + "\n";

        // Employee reference to a CommissionWorker
        employee = commissionWorker;

        output += employee.toString() + " earned $"
                + precision2.format(employee.earnings()) + "\n"
                + commissionWorker.toString() + " earned $"
                + precision2.format(
                commissionWorker.earnings()) + "\n";

        // Employee reference to a PieceWorker
        employee = pieceWorker;

        output += employee.toString() + " earned $"
                + precision2.format(employee.earnings()) + "\n"
                + pieceWorker.toString() + " earned $"
                + precision2.format(pieceWorker.earnings()) + "\n";

// Employee reference to an HourlyWorker
        employee = hourlyWorker;

        output += employee.toString() + " earned $"
                + precision2.format(employee.earnings()) + "\n"
                + hourlyWorker.toString() + " earned $"
                + precision2.format(hourlyWorker.earnings()) + "\n";

        JOptionPane.showMessageDialog(null, output,
                "Demonstrating Polymorphism",
                JOptionPane.INFORMATION_MESSAGE);

        System.exit(0);
    }
} // end class Test
Code:
import java.util.Date;

// PieceWorker class derived from Employee

public final class PieceWorker extends Employee {

   
	private double wagePerPiece; // wage per piece output
    private int quantity; // output for week

    // constructor for class PieceWorker
    public PieceWorker(String first, String last, Date dateOfBirth,
    		double wage, int numberOfItems) {
        super(first, last, dateOfBirth); // call superclass constructor
        setWage(wage);
        setQuantity(numberOfItems);
    }

    // set PieceWorker's wage
    public void setWage(double wage) {
        wagePerPiece = (wage > 0 ? wage : 0);
    }

    // set number of items output
    public void setQuantity(int numberOfItems) {
        quantity = (numberOfItems > 0 ? numberOfItems : 0);
    }

    // determine PieceWorker's earnings
    public double earnings() {
        return quantity * wagePerPiece;
    }

    public String toString() {
        return "Piece worker: " + super.toString();
    }
}
Code:
import java.util.Date;

// Definition of class HourlyWorker

public final class HourlyWorker extends Employee {

    private double wage; // wage per hour
    private double hours; // hours worked for week

    // constructor for class HourlyWorker
    public HourlyWorker(String first, String last, Date dateOfBirth,
            double wagePerHour, double hoursWorked) {
        super(first, last, dateOfBirth); // call superclass constructor
        setWage(wagePerHour);
        setHours(hoursWorked);
    }

    // Set the wage
    public void setWage(double wagePerHour) {
        wage = (wagePerHour > 0 ? wagePerHour : 0);
    }

    // Set the hours worked
    public void setHours(double hoursWorked) {
        hours = (hoursWorked >= 0 && hoursWorked < 168
                ? hoursWorked : 0);
    }

    // Get the HourlyWorker's pay
    public double earnings() {
        return wage * hours;
    }

    public String toString() {
        return "Hourly worker: " + super.toString();
    }
}