2013-07-31 14 views
0

我有以下代碼「不能引用Employee.DEFAULT_GENDER前超構造被稱爲」錯誤

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對象的是他的名字(在這種情況下,性別和年齡被設置爲默認值,也不允許默認構造函數)。任何意見,爲什麼發生這種情況?

回答

1

DEFAULT_GENDER是類Employee的實例變量,只有創建類的實例後才能使用。在構造函數完全執行之前,實例沒有完全構造,因此你會得到這樣的錯誤。

使這兩個默認值爲static

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

出線變量作爲static使得它們與類相關聯Employee,因此它可以在不創建類Employee的任何實例存在。

+0

會使其靜態解決這個問題?靜態變量在加載類時被初始化。 –

+0

@AniketThakur這個答案是正確的,使他們靜態,他們屬於類,而不是對象+1 – nachokk

+0

非常感謝。這工作,但只是出於好奇,是否有工作,如果我想在對象級別,而不是類級別的默認值? –

0

你可以把它靜若你希望能夠得到它的任何地方 但所用的第一個答案作出新的實例作爲一個更好的設計

相關問題