2

I have a class called Employee with its 2 private variables and also contains its needed constructors and other necessary methods :

public class Employee {

    private String name;
    private int id;

    public Employee() {
        name = " No Name!";
        id = 00100;
    }

    public Employee(String n, int i) {
        name = n;
        id = i;
    }

    public Employee(Employee originalObject) {
        name = originalObject.name;
        id = originalObject.id;
    }

    public String getName() {
        return name;
    }

    public int getID() {
        return id;
    }

    public void setName(String newName) {
        if (newName == null) {
            System.out.println("Fatal Error setting employee name!");
            System.exit(0);
        } else {
            name = newName;
        }
    }

    public void setID(int newID) {
        id = newID;
    }

    public String toString() {
        return (name + " " + id);
    }

    public boolean equals(Employee otherEmployee) {
        return (name.equals(otherEmployee.name)
                && id == otherEmployee.id);
    }
}

This Employee class extends another class named as HourlyEmployee. The extended class is as follows:

public class HourlyEmployee extends Employee {

    private double wageRate;
    private double hours;

    public HourlyEmployee() {
        super();
        wageRate = 0;
        hours = 0;
    }

    public HourlyEmployee(String na, int di, double wR, double h) {
        super(na, di);
        if (wR >= 0 || h >= 0) {
            wageRate = wR;
            hours = h;
        } else {
            System.out.println("Fatal Error!: creating illegal hourly employee");
        }
        System.exit(0);
    }

    public HourlyEmployee(HourlyEmployee originalObject) {
        super(originalObject);
        wageRate = originalObject.wageRate;
        hours = originalObject.hours;
    }

    public double getRate() {
        return wageRate;
    }

    public double getHours() {
        return hours;
    }

    public double getPay() {
        return wageRate * hours;
    }

    public void setRate(double newWR) {
        if (newWR >= 0) {
            wageRate = newWR;
        } else {
            System.out.println("Fatal Error: negative hours worked!");
            System.exit(0);
        }
    }

    public String toString() {
        return (getName() + " " + getID() + "\n$" + wageRate + " per hour for " + hours + "hours");
    }
}

After I have done coding this class, I wrote the Demo class to test these classes and how it will work.

public class InheritanceDemo {

    public static void main(String[] args) {
        HourlyEmployee joe = new HourlyEmployee("Joe Worker", 281952, 50.50, 160);
        System.out.println("joe's longer name is " + joe.getName());
        System.out.println("Changing joe's name to joseph.");
        joe.setName("Joseph");
        System.out.println("joe's record is as follows: ");
        System.out.println(joe);
    }
}

Finally, I tried to compile the code and that worked fine, but, unfortunately, the demo class didn't run even though it showed me that " process completed" in the screen! What do you think is wrong with this program ?

8
  • Can you also post the command used for compiling and for running? Commented Feb 12, 2012 at 20:25
  • Run your program in debugger to trace it. Commented Feb 12, 2012 at 20:26
  • What does "didn't run" look like? Are you saying that the messages weren't written to the console? Commented Feb 12, 2012 at 20:26
  • I would guess that you have a bug. Commented Feb 12, 2012 at 20:27
  • 1
    what do you mean with "didn't even run"? Do you mean: "I don't see the output I expect"? Commented Feb 12, 2012 at 20:28

2 Answers 2

5

The problem is with the first System.exit(0) in HourlyEmployee. Since there is no {} after that else, the exit is executed unconditionally.

Sign up to request clarification or add additional context in comments.

Comments

3

Your constructor should NOT have a System.exit in it.

You shouldn't write out an error message, either. Throw an IllegalArgumentException.

Your HourlyEmployee ctor is borked. This is what you want:

public class HourlyEmployee extends Employee {

    private double wageRate;
    private double hours;

    public HourlyEmployee() {

        super();
        wageRate = 0;
        hours = 0;


    }

    public HourlyEmployee(String na, int di, double wR, double h) {

        super(na, di);
        if (wR < 0) throw new IllegalArgumentException("wage rate cannot be negative");
        if (h < 0) throw new IllegalAccessError("hours cannot be negative");
        wageRate = wR;
        hours = h;

    }

    public HourlyEmployee(HourlyEmployee originalObject) {

        super(originalObject);
        wageRate = originalObject.wageRate;
        hours = originalObject.hours;

    }

    public double getRate() {

        return wageRate;

    }

    public double getHours() {

        return hours;
    }

    public double getPay() {

        return wageRate * hours;

    }

    public void setRate(double newWR) {

        if (newWR < 0) throw new IllegalArgumentException("wage rate cannot be negative");
            wageRate = newWR;
    }

    public String toString() {

        return (getName() + " " + getID() + "\n$" + wageRate + " per hour for " + hours + "hours");
    }

}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.