13

我想从公共 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()调用匹配相同数量参数的超级构造函数(在本例中为 Object 类,因为 MyClass 隐式扩展 Object 并且 Object 类具有无参数构造函数)。

this()调用匹配相同数量参数的当前类的构造函数。

于 2012-10-12T05:22:13.147 回答
0

一旦创建了带参数的构造函数,就不能调用默认构造函数。您必须自己创建无参数构造函数才能从参数化构造函数进行调用。

于 2012-10-12T05:24:26.327 回答