我想从公共java类中的参数化构造函数中调用默认构造函数。
我能实现吗?
答案 0 :(得分:26)
在参数化构造函数的第一行使用this();
,它将调用默认构造函数。确保你有默认的构造函数,因为如果你声明一个参数化的构造函数,编译器就不会提供一个构造函数。
答案 1 :(得分:6)
对于Java:您可能意味着没有参数的构造函数。 如果是这样,您可以使用以下代码:
public class MyClass {
// no params constructor
public MyClass() {
...
}
// parametrized constructor
public MyClass(int p1, String p2) {
this();
}
}
希望这有帮助
答案 2 :(得分: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没有arg构造函数),它匹配相同数量的参数。
this()调用当前类的构造函数,该构造函数匹配相同数量的参数。
答案 3 :(得分:1)
在Java中,默认构造函数是编译器隐式提供的无参数构造函数。如果您引入任何带参数的构造函数,编译器将不会提供一个。
在这种情况下,你必须显式定义一个无参数的构造函数(顺便说一句,它不是默认的,因为它不是由编译器提供的),例如public MyClass() { }
。
你可以从其他构造函数中调用它this();
,它必须是构造函数中被调用的第一个语句。
答案 4 :(得分:1)
您可以使用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");
}
}
答案 5 :(得分:0)
一旦创建了带参数的构造函数,就无法调用默认构造函数。您必须自己创建无参数构造函数,以便从参数化构造函数进行调用。