public Java クラス内のパラメーター化されたコンストラクターからデフォルトのコンストラクターを呼び出したいです。
達成できますか?
パラメーター化されたコンストラクターの最初の行で使用this();
すると、デフォルトのコンストラクターが呼び出されます。パラメーター化されたコンストラクターを宣言する場合、コンパイラーはデフォルトのコンストラクターを提供しないため、デフォルトのコンストラクターがあることを確認してください。
Java の場合: パラメーターのないコンストラクターを意味する場合があります。その場合は、次のコードを使用できます。
public class MyClass {
// no params constructor
public MyClass() {
...
}
// parametrized constructor
public MyClass(int p1, String p2) {
this();
}
}
お役に立てれば
Javaでは、デフォルトのコンストラクターは、コンパイラーによって暗黙的に提供される引数なしのコンストラクターです。また、引数を使用してコンストラクターを導入した場合、コンパイラーはコンストラクターを提供しません。
その場合、引数なしのコンストラクターを明示的に定義する必要があります(コンパイラーによって提供されていないため、デフォルトではありません)public MyClass() { }
。
また、他のコンストラクターからとして呼び出すことができます。これthis();
は、呼び出されるコンストラクターの最初のステートメントである必要があります。
new演算子(次のように:new Test();)またはthis();を使用してデフォルトのコンストラクターを呼び出すことができます。Test()はクラスのメソッドではないため、禁止されています。
package org.gpowork.test;
public class Test {
private String field;
private Long time = 0L;
public Test(){
this.time = System.currentTimeMillis();
System.out.println("Default constructor. "+this.time);
}
public Test(String field){
this();
Test instance = new Test();
this.field = field;
}
public static void main(String[] args){
System.out.println("start...");
Test t1 = new Test();
System.out.println("-------");
Test t2 = new Test("field1");
}
}
はい、できます
public YourClass() {
public YourClass() { super();}
public YourClass(int x) { this();}
}
同じ引数コンストラクターがある場合。これはうまくいきません
public YourClass() {
public YourClass(int x, int y) { this(); } // compiler error here
public YourClass(int x) { super(); }
}
注: super()は、同じ数の引数に一致するスーパー コンストラクター (この場合、MyClass は Object を暗黙的に拡張し、クラス Object には引数のないコンストラクターがあるため、クラス Object) を呼び出します。
this()は、同じ数の引数に一致する現在のクラスのコンストラクターを呼び出します。
引数を取るコンストラクターを作成した後は、デフォルトのコンストラクターを呼び出すことはできません。パラメーター化されたコンストラクターから呼び出しを行うには、引数なしのコンストラクターを自分で作成する必要があります。