デフォルト コンストラクターとは正確には何ですか? 次のどれがデフォルト コンストラクターであり、他のコンストラクターと何が違うのか教えてください。
public Module() {
this.name = "";
this.credits = 0;
this.hours = 0;
}
public Module(String name, int credits, int hours) {
this.name = name;
this.credits = credits;
this.hours = hours;
}
ベストアンサー1
どちらでもありません。定義した場合、それはデフォルトではありません。
デフォルト コンストラクターは、別のコンストラクターを定義しない限り、自動的に生成される引数なしのコンストラクターです。初期化されていないフィールドはデフォルト値に設定されます。例では、型がString
、int
、でありint
、クラス自体が public であると仮定すると、次のようになります。
public Module()
{
super();
this.name = null;
this.credits = 0;
this.hours = 0;
}
これはまさに
public Module()
{}
これは、コンストラクターがまったくない場合とまったく同じです。ただし、少なくとも 1 つのコンストラクターを定義した場合、デフォルト コンストラクターは生成されません。
を参照してくださいJava仕様具体的には、セクション8.8.9. デフォルトコンストラクタのJava言語仕様。
クラスにコンストラクター宣言が含まれていない場合は、デフォルト コンストラクターが暗黙的に宣言されます。トップレベル クラス、メンバー クラス、またはローカル クラスのデフォルト コンストラクターの形式は次のとおりです。
- デフォルト コンストラクターは、クラスと同じアクセス修飾子を持ちます。ただし、クラスにアクセス修飾子がない場合、デフォルト コンストラクターはパッケージ アクセスを持ちます (§6.6)。
- デフォルト コンストラクターには、非プライベートの内部メンバー クラスを除いて、正式なパラメーターはありません。非プライベートの内部メンバー クラスでは、デフォルト コンストラクターは、クラスの直接囲むインスタンスを表す 1 つの正式なパラメーターを暗黙的に宣言します (§8.8.1、§15.9.2、§15.9.3)。
- デフォルト コンストラクターには
throws
句がありません。
説明
技術的には、フィールドをデフォルト初期化するのはコンストラクタ(デフォルトまたはその他)ではありません。しかし、私は答えとして残しておきます。
- 質問のデフォルトが間違っており、
- これらが含まれているかどうかに関係なく、コンストラクターはまったく同じ効果を持ちます。