13

public Java クラス内のパラメーター化されたコンストラクターからデフォルトのコンストラクターを呼び出したいです。

達成できますか?

4

6 に答える 6

36

パラメーター化されたコンストラクターの最初の行で使用this();すると、デフォルトのコンストラクターが呼び出されます。パラメーター化されたコンストラクターを宣言する場合、コンパイラーはデフォルトのコンストラクターを提供しないため、デフォルトのコンストラクターがあることを確認してください。

于 2012-10-12T05:19:26.983 に答える
8

Java の場合: パラメーターのないコンストラクターを意味する場合があります。その場合は、次のコードを使用できます。

public class MyClass {
   // no params constructor 
   public MyClass() {
      ...
   }

   // parametrized constructor
   public MyClass(int p1, String p2) {
       this();
   }
}

お役に立てれば

于 2012-10-12T05:18:56.300 に答える
2

Javaでは、デフォルトのコンストラクターは、コンパイラーによって暗黙的に提供される引数なしのコンストラクターです。また、引数を使用してコンストラクターを導入した場合、コンパイラーはコンストラクターを提供しません。

その場合、引数なしのコンストラクターを明示的に定義する必要があります(コンパイラーによって提供されていないため、デフォルトではありません)public MyClass() { }

また、他のコンストラクターからとして呼び出すことができます。これthis();は、呼び出されるコンストラクターの最初のステートメントである必要があります。

于 2012-10-12T05:25:29.460 に答える
2

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");
    }
}
于 2012-10-12T05:27:03.437 に答える
1

はい、できます

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()は、同じ数の引数に一致する現在のクラスのコンストラクターを呼び出します。

于 2012-10-12T05:22:13.147 に答える
0

引数を取るコンストラクターを作成した後は、デフォルトのコンストラクターを呼び出すことはできません。パラメーター化されたコンストラクターから呼び出しを行うには、引数なしのコンストラクターを自分で作成する必要があります。

于 2012-10-12T05:24:26.327 に答える