我的Java枚举类是否正确格式化了?

时间:2014-02-10 04:33:44

标签: java inheritance parameters constructor enums

从我之前提到的关于枚举的问题中,我能够理解真正的内容,但我在练习时对他们来说仍然是新手。在我的实验室里,它意外地说:

“创建扩展SalariedEmployee类的类管理器,并包含以下信息:

- 此员工管理的部门名称。使用创建枚举类 4-8个不同的部门,如薪资,生产,会计,研究,市场营销等。

- 雇员数量(整数) - 介于1和100之间的值。“

如果我这样做的话,你们会觉得这样吗? :

public enum Department {
Payroll(10), Production(25), Accounting(30), Research(25), Marketing(7);
//DepartmentName(numberOfEmployees)
private int numberOfEmployees;

private Department(int numberOfEmployees) {
    this.numberOfEmployees = numberOfEmployees;
}

}

你们认为这是有效还是充足的?显然,教授肯定知道他的要求是什么,但从你自己的解释来看,我这样做是否正确?

另外,如果我的超级构造函数的int的验证范围比我想要的子类的特定参数的范围更大,那么在super()调用之后只发出一个if / else语句就足够了吗?例如:

  public SalariedEmployee(String name, String number, double salary, double deductions) {
    super(name, number);
    if (salary >= 40000.00 && salary <= 160000.00) {
        this.yearlySalary = salary; 
    } else {
        this.yearlySalary = 75000.00;

但是在子类中我希望范围在40k到100k之间,所以我这样做了:

     public Supervisor(String name, String number, double salary, double deductions, int goals) {
    super(name, number, salary, deductions);
    if (salary >= 40000.00 && salary <= 100000.00) {
        this.yearlySalary = salary; 
    } else {
        this.yearlySalary = 75000.00;
    }

    }

这足以覆盖超级构造函数的参数范围/规范吗?谢谢。

2 个答案:

答案 0 :(得分:1)

我怀疑老师是否打算让你把员工人数纳入enum。提供给枚举的其他信息通常是不会更改的数据。员工人数经常变化。我相信您的教师要求说Manager类应该包含一个属性,该属性说明Manager管理了多少员工,如下所示:

public class Manager extends SalariedEmployee {
    private Department department;
    private Integer numEmployees;
...
}

由于这似乎是一项任务,我不想提供比这更多的代码。祝你好运!

我认为你在问题的第二部分提出的问题就足够了。在构造函数中调用super()之后,可以自由地将super()方法设置的任何属性的值更改为不同的值。我不确定我是否完全理解你要对工资范围做些什么,但我认为你已经提供了足够的信息来说明你所做的就足够了。

答案 1 :(得分:1)

您真正需要放入子类构造函数的是

super(name, number, salary,deductions);
if(salary>100000.00){
    this.yearlySalary=75000.00;
}

因为您正在检查超类中是否介于40000和160000之间。你的枚举看起来是正确的。