创建一个数组,继承

时间:2012-08-21 09:25:59

标签: java arrays inheritance

我正在为即将到来的考试而学习并解决样本问题,而且我被困在问题的第四部分。到目前为止的代码如下所示,问题已在评论中提及。

/*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);
}
}

第二部分

/* 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);
}
}

下一部分是我被困的地方,我知道我应该有一个构造函数Staff(),它创建一个数组,我可以存储员工和商人我不知道如何去做。所有指针都很受欢迎。

/* 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]); 
 } 
}   

使用以下程序进行测试:

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(); 
}
}

得到了一个奇怪的输出:

员工详细信息:员工@ 4e82701e

员工详情:Tradesman @ 558ee9d6

员工详情:员工@ 199a0c7c

员工详情:Tradesman @ 50a9ae05

员工详细信息:员工@ 33dff3a2

员工详情:Tradesman @ 33f42b49

员工详情:Tradesman @ 6345e044

员工详情:Tradesman @ 86c347

员工详细信息:员工@ f7e6a96

对此的任何建议以及对上述实施的任何提示/改进都将不胜感激。

2 个答案:

答案 0 :(得分:0)

您需要一个集合Staff

的班级Employees

以下是一些用作伪代码的groovy代码(所以你不能只复制它:-))

class Staff {

    def members = [:] // A collection

    void hire(Employee employee) {
        // Add to collection
    }

    void fire(Employee employee) {
        // Remove from collection
    }

    void print() {
        // iterate over collection and print content
    }
}

走自己的榜样......

public class Staff {

    private Employee[] emp = new Employee[100];

    public Staff() {
    }

    public void hire() {
    }
}

但您应该考虑使用ArrayList,因为您可以通过这种方式更轻松地操作集合。但我不确定你的老师允许这样做。否则它会是这样的:

public class Staff {

    private ArrayList<Employee> emp = new ArrayList<Employee>();

    public Staff() {
    }

    public void hire() {
    }
}

将此添加到您的Employee课程:

public class Employee {
    ... // all your code

    @Override
    public String toString() {
        // Create a string by using StringBuilder.append() and return sb.toString();
    }
}

Tradesman执行相同操作,但先调用`super.toString()并添加此类中的额外字段。

答案 1 :(得分:0)

  

员工是一群员工,其中一些是商人。

请参阅?员工应该是员工的集合。那你为什么要从tradesman扩展呢?
三件事,你必须考虑:

您不必为Staff使用继承。它应该是一个包含collection Employee s。

的类

由于Tradesman继承自Employee,因此您无需担心将此类对象添加到该集合中。您可以从该集合中的两个类实例化。

并且,您需要具有一些功能来向/从该集合中添加/删除对象。我相信您需要LinkedList使用collecetion