class Employee {
    protected int id;
    protected String name;
    protected String jobTitle;

    public Employee(int id, String name, String title) {
        this.id = id;
        this.name = name;
        this.jobTitle = title;
    }

    public int getID() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getTitle() {
        return jobTitle;
    }

    public double computePay() {
        return 0.0;
    }

    public String toString() {
        return ("Employee Dtails : " + getID() + "\t" + getName() +
                "\t" + getTitle() );
    }
}

class PermEmployee extends Employee {
    private double pay;
    private double superContribution;

    public PermEmployee (int id, String name, String title, double grossPay) {
        super(id, name, title);
        pay = grossPay;
        superContribution = 0.07 * pay;
    }

    public double computePay() {
        return (pay - superContribution);
    }

    public String toString() {
        return (super.toString() + "\n" +
                 "Paid: " + Double.toString(computePay()));
    }
}

class ContractEmployee extends Employee {
    private int term;
    private double pay;

    public ContractEmployee(int id, String name, String title,
              double payRate, int months) {
        super(id, name, title);
        pay = payRate;
        term = months;
    }

    public double computePay() {
        return pay;
    }

    public String toString() {
        return (super.toString() + "\n" + "Paid : " +
                Double.toString(computePay()) );
    }
}

class SessionEmployee extends Employee {
    private int hoursWorked;
    private double payRate;

    public SessionEmployee (int id, String name, String title, double hrRate,
        int hrs) {
        super(id, name, title);
        hoursWorked = hrs;
        payRate=hrRate;
    }
    public double computePay() {
        return (payRate * hoursWorked);
    }
    public String toString() {
        return (super.toString() + "\n" +
                "Hours worked: " + Integer.toString(hoursWorked) + "\n" +
                "Pay rate : " + Double.toString(payRate) + "\n" +
                "Paid : " + Double.toString(computePay()));
    }
}

public class TestEmployee{
    public static void main(String[] args) {

        Employee[] emp = new Employee[4];
        emp[1] = new PermEmployee(111, "Melinda", "Senior Lecturer", 3000);
        emp[2] = new ContractEmployee(222, "Joe", "Lecturer", 2100, 12);
        emp[3] = new SessionEmployee(333, "David", "Tutor", 60.0, 16);

        for (int i=1; i <=3; i++)
            System.out.println(emp[i].toString());
    }
}

         
