我有以下代码
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_GENDER
和DEFAULT_AGE
以确保一些默认值。创建Employee对象所需的只是他的名字(在这种情况下,性别和年龄设置为默认值。也不允许使用默认构造函数)。关于为什么会发生这种情况的任何观点?
答案 0 :(得分:1)
DEFAULT_GENDER
是类Employee
的实例变量,在创建类的实例之前不能使用它。在构造函数完全执行之前,实例未完全构造,因此会出现这样的错误。
将默认值设为static
。
final static String DEFAULT_GENDER = "male";
final static int DEFAULT_AGE = 18;
将变量限定为static
会使它们与类Employee
相关联,因此它可以在不创建类Employee
的任何实例的情况下存在。
答案 1 :(得分:0)
如果您希望能够在任何地方获取它,可以将其设为静态 但使用了第一个答案,将新实例作为更好的设计