我正在编写一些继承代码,用于显示公司员工的信息。工作程序可以具有三种状态,这些状态被放置在枚举中。{TEMPORARY,PART_TIME,FULL_TIME}。默认状态为"临时"。当我运行代码时,我在代码中遇到的问题是,当我没有提到工作者的状态时;"临时";但它打印出";空";相反,我不确定如何修复它。关于这个问题,我认为枚举与数组相似,我应该给它一些值,然后再更改它。
这是我的代码:
class Faculty extends Employee{
private Status status;
public Faculty(){
status = Status.TEMPORARY;
}
public Faculty(String name, String email, String phoneNumber){
super(name, email, phoneNumber);
}
public Faculty(String name, String email, String phoneNumber, String office, double salary, Status status){
super(name, email, phoneNumber, office, salary);
this.status = status;
}
public void setStatus(Status status){
this.status = status;
}
public String getStatus(){
return " Status: " + status;
}
@Override
public String toString(){
return getName() + getEmail() + getPhoneNumber() + getOffice() + " Salary: " + getSalary() + getStatus();
}
}
您似乎正在使用第二个构造函数来创建Faculty
。但是,此构造函数从不将status
字段设置为任何值,而是将其保留为null。
为了确保status
有一个值,您必须在构造函数中添加一行:
public Faculty(String name, String email, String phoneNumber){
super(name, email, phoneNumber);
this.status = Status.TEMPORARY;
}
或者,您可以将初始化添加到字段声明中:private Status status = Status.TEMPORARY;
关于代码的其他一些评论:
- 仍然可以在第三个构造函数中或通过setter将
status
设置为null
。在这种情况下,您可能想要抛出异常/使用默认值 - Setter和Getter应具有相同的数据类型。
getStatus
应该返回状态,而不是格式化的字符串版本
如果在Faculty
类中定义status
字段时直接给它一个值,那么默认情况下该值就是给字段的值。
private Status status = Status.TEMPORARY;
这意味着您不再需要在构造函数中手动设置它,因为构造函数不会更改字段的默认值TEMPORARY
。
public Faculty(){
// status = Status.TEMPORARY; This line can be removed.
}
还需要注意的是,当您从Faculty
类中的构造函数调用super
构造函数时:
public Faculty(String name, String email, String phoneNumber){
super(name, email, phoneNumber);
}
您编写的默认Faculty
构造函数(将status
设置为TEMPORARY
的构造函数(没有被调用,所以这可能就是为什么即使在默认构造函数中为status
字段指定了默认值,它仍然为null的原因。直接在字段中设置默认值可以解决这个问题,但记住这一点仍然很有用!