繁体   English   中英

我可以在java中的公共类中调用参数化构造函数中的默认构造函数吗?

[英]Can I call default constructor from parameterized constructor inside public class in java?

我想从公共java类中的参数化构造函数调用默认构造函数。

我能实现吗?

使用this(); 在参数化构造函数的第一行中,它将调用您的默认构造函数。 确保你有默认的构造函数,因为如果你声明一个参数化的构造函数,编译器就不会提供一个构造函数。

对于Java:您可能意味着没有参数的构造函数。 如果是这样,您可以使用以下代码:

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

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

希望这可以帮助

是的你可以

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()调用当前类的构造函数,该构造函数匹配相同数量的参数。

在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");
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM