“在调用超类型构造函数之前,无法引用Employee.DEFAULT_GENDER”错误

时间:2013-07-31 05:46:51

标签: java constructor

我有以下代码

public class Employee {

private String name;
private String gender;
private int age;

final String DEFAULT_GENDER = "male";
final int DEFAULT_AGE = 18;

public Employee(String name,String gender,int age) {
    this.name = name;
    this.gender = gender;
    this.age = age;
}

public Employee(String name) {
    this(name,DEFAULT_GENDER,DEFAULT_AGE);
}

}

我收到以下错误

Cannot reference Employee.DEFAULT_GENDER before supertype constructor has been called

我不明白为什么说Employee.DEFAULT_GENDER?我没有把它定义为静态!为什么不允许我用3个参数调用构造函数?我已定义DEFAULT_GENDERDEFAULT_AGE以确保一些默认值。创建Employee对象所需的只是他的名字(在这种情况下,性别和年龄设置为默认值。也不允许使用默认构造函数)。关于为什么会发生这种情况的任何观点?

2 个答案:

答案 0 :(得分:1)

DEFAULT_GENDER是类Employee的实例变量,在创建类的实例之前不能使用它。在构造函数完全执行之前,实例未完全构造,因此会出现这样的错误。

将默认值设为static

final static String DEFAULT_GENDER = "male";
final static int DEFAULT_AGE = 18;

将变量限定为static会使它们与类Employee相关联,因此它可以在不创建类Employee的任何实例的情况下存在。

答案 1 :(得分:0)

如果您希望能够在任何地方获取它,可以将其设为静态 但使用了第一个答案,将新实例作为更好的设计