1. ホーム
  2. java

[解決済み] Java デフォルトコンストラクタ

2022-03-01 06:27:39

質問

次のうちどれがデフォルトのコンストラクタで、何が他のコンストラクタと違うのか教えてください。

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;
}

解決方法は?

どちらでもない。定義しても、デフォルトではありません。

デフォルトのコンストラクタは、他のコンストラクタを定義しない限り、自動的に生成される無引数コンストラクタです。初期化されていないフィールドはすべてデフォルト値に設定されます。この例では、型を次のように仮定しています。 String , intint であり、クラスそのものがパブリックであること。

public Module()
{
  super();
  this.name = null;
  this.credits = 0;
  this.hours = 0;
}

と全く同じです。

public Module()
{}

また、コンストラクタを全く持たないのと全く同じです。ただし、少なくともひとつのコンストラクタを定義していれば、デフォルトのコンストラクタは生成されません。

参考にしてください。 Java言語仕様

クラスにコンストラクタの宣言がない場合、正式なパラメータと throws 節を持たないデフォルトのコンストラクタが暗黙のうちに宣言されます。

明確化

技術的には、フィールドをデフォルトで初期化するのはコンストラクタ(デフォルトまたはそれ以外)ではないのです。しかし、私はそれを答えとして残しています。

  • の質問では、デフォルトを間違えており
  • が含まれていてもいなくても、コンストラクタは全く同じ効果を発揮します。