0

次のコードがあります

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_AGEEmployee オブジェクトを作成するために必要なのは、彼の名前だけです (その場合、性別と年齢はデフォルトに設定されています。また、デフォルトのコンストラクタは許可されていません)。なぜこれが起こっているのかについての意見はありますか?

4

2 に答える 2

1

DEFAULT_GENDERはクラスのインスタンス変数であり、クラスEmployeeのインスタンスが作成されるまで使用できません。コンストラクターが完全に実行されるまで、インスタンスは完全には構築されないため、このようなエラーが発生します。

両方のデフォルト値を にしstaticます。

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

変数を as で修飾すると、変数staticはクラスに関連付けられるEmployeeため、クラスのインスタンスを作成せずに存在できますEmployee

于 2013-07-31T05:48:53.503 に答える
0

どこでも取得できるようにしたい場合は静的にすることができますが、最初の回答を使用して新しいインスタンスをより良い設計として作成します

于 2013-07-31T05:54:58.030 に答える