Am studying for an upcoming exam and working through sample problems and am stuck on the fourth part of a question. Code so far is below with the question commented in.
/*Part 1. Write a class Employee to encapsulate the notion of an employee.
The class should include a name and a department (both of type String),
an all-args constructor, and a method to print the details of the employee on the screen.
It should also provide an appropriate equals method
(equality of employees requires that name and department be the same).
Check it by compiling. */
public class Employee {
public String name;
public String department;
public Employee(String n, String d) {
name = n;
department = d;
}
public void print() {
System.out.println("Employee's name: " + name);
System.out.println("Employee's department: " + department);
}
public boolean equals(Employee e) {
return(name==e.name&&department==e.department);
}
}
Second part
/* A tradesman is an employee with a trade such as “carpenter” or “painter”.
Write a class Tradesman to encapsulate the notion of a tradesman.
It should include a method to print out the tradesman’s details.
Make the class by inheritance from Employee.
An employee’s trade is not significant for equality.
Check the class by compiling. */
public class Tradesman extends Employee {
public String trade;
public Tradesman(String n, String d, String t) {
super(n, d);
trade = t;
}
public void setTrade (String newTrade) {
trade = newTrade;
}
public void print() {
System.out.println("Tradesmans name: " + name);
System.out.println("Tradesmans department: " + department);
System.out.println("Tradesmans trade: " + trade);
}
}
The next part is where I am stuck, I know I should have a constructor Staff() which creates an array where I can store employees and tradesmen Im just not sure how to go about it. All pointers appreciated.
/* A staff is a collection of employees, some of whom are tradesmen.
Write a class Staff to encapsulate the notion of a staff.
The members of staff should be stored in an array (which will typically not be full).
Include methods hire to hire and fire to fire a staff member,
as well as method put to print out a complete list of the staff members.
Check it by compiling.*/
import java.util.ArrayList;
import java.util.Arrays;
public class Staff {
private ArrayList emp = new ArrayList();
public Staff() {
}
public void hire(Employee employee) {
emp.add(employee);
}
public void fire(Employee employee) {
emp.remove(employee);
}
public void put() {
// get array
Object ia[] = emp.toArray();
for(int i=0; i<ia.length; i++)
System.out.println("Employee details: " + ia[i]);
}
}
Am testing with the following program:
class StaffTest {
public static void main(String[] args) {
Staff personnel = new Staff();
Employee e1 = new Employee("Mike","Sales");
Employee e2 = new Tradesman(
"Fred","Engineering","Welder");
Employee e3 = new Employee("Pat","Sales");
Employee e4 = new Tradesman(
"Jean","Finishing", "Painter");
Employee e5 = new Employee("Bill","Marketing");
Employee e6 = new Tradesman(
"Anne","Engineering", "Fitter");
Employee e7 = new Tradesman(
"Paul","Design", "Draughtsman");
Employee e8 = new Tradesman(
"Eddy","Finishing","Painter");
Employee e9 = new Employee("John","Despatch");
personnel.hire(e1); personnel.hire(e2);
personnel.hire(e3); personnel.hire(e4);
personnel.hire(e5); personnel.hire(e6);
personnel.hire(e7); personnel.hire(e8);
personnel.hire(e9);
personnel.put(); System.out.println();
personnel.fire(e1); personnel.fire(e5);
personnel.fire(e9);
personnel.put(); System.out.println();
personnel.fire(new Tradesman(
"Eddy", "Finishing", "Painter"));
personnel.put();
}
}
Am getting a strange output of:
Employee details: Employee@4e82701e
Employee details: Tradesman@558ee9d6
Employee details: Employee@199a0c7c
Employee details: Tradesman@50a9ae05
Employee details: Employee@33dff3a2
Employee details: Tradesman@33f42b49
Employee details: Tradesman@6345e044
Employee details: Tradesman@86c347
Employee details: Employee@f7e6a96
Any advice on this and any tips/improvements on the above implementation would be appreciated.
You will need a class
Staffthat has a collection ofEmployeesHere is some
groovycode used as pseudo-code (so you can’t just copy it 🙂 )Going to your own example…
But you should consider using an
ArrayListinstead since you can manipulate the collection much easier this way. But I am not sure that your teacher allows that. Otherwise it would be something like this:Add this to your
Employeeclass:Do the same with
Tradesmanbut call `super.toString() first and add the extra fields from this class.