创建单个对象时如何执行多个构造函数[重复]

Posted

技术标签:

【中文标题】创建单个对象时如何执行多个构造函数[重复]【英文标题】:How to execute multiple constructor, when creating single object [duplicate] 【发布时间】:2013-09-30 17:35:46 【问题描述】:

我想在创建单个对象的同时执行多个构造函数。例如,我有一个这样的类定义-

public class Prg

    public Prg()
    
        System.out.println("In default constructor");
    
    public Prg(int a)
    
        System.out.println("In single parameter constructor");
    
    public Prg(int b, int c)
    
        System.out.println("In multiple parameter constructor");
    

我正在尝试通过以下代码来实现它 -

public class Prg

    public Prg()
    
        System.out.println("In default constructor");
    
    public Prg(int a)
    
        Prg();
        System.out.println("In single parameter constructor");
    
    public Prg(int b, int c)
    
        Prg(b);
        System.out.println("In multiple parameter constructor");
    
    public static void main(String s[])
    
        Prg obj = new Prg(10, 20);
    

但在这种情况下,它会产生错误,例如 -

Prg.java:11: error: cannot find symbol
            Prg();
            ^
  symbol:   method Prg()
  location: class Prg
Prg.java:16: error: cannot find symbol
            Prg(b);
            ^
  symbol:   method Prg(int)
  location: class Prg
2 errors

谢谢

【问题讨论】:

【参考方案1】:

在您的构造函数中使用this() 而不是Prg()

【讨论】:

哦,谢谢。我正在搜索诸如 super 之类的关键字,以指向同一类。但我没有试过这个。现在它正在工作。【参考方案2】:

使用this关键字。完整运行代码如下

public class Prg

    public Prg()
    
        System.out.println("In default constructor");
    
    public Prg(int a)
    
        this();
        System.out.println("In single parameter constructor");
    
    public Prg(int b, int c)
    
        //Prg obj = new Prg(10, 20);

this(b);        System.out.println("In multiple parameter constructor");
    
    public static void main(String s[])
    
        Prg obj = new Prg(10, 20);
    

【讨论】:

【参考方案3】:

调用其他构造函数时使用this()而不是Prg()

【讨论】:

【参考方案4】:

使用this 而不是Prg

    public Prg()
    
        System.out.println("In default constructor");
    
    public Prg(int a)
    
        this();
        System.out.println("In single parameter constructor");
    
    public Prg(int b, int c)
    
        this(b);
        System.out.println("In multiple parameter constructor");
    

【讨论】:

【参考方案5】:

您应该使用this 声明。

例如

public Prg(int b, int c)

    this(b);
    System.out.println("In multiple parameter constructor");

【讨论】:

以上是关于创建单个对象时如何执行多个构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

经典问题解析二(十九)

基类构造函数参数值[重复]

请问含有多个对象成员的派生类的构造函数执行时不是先执行基类么?为啥这个先输出的是“正式生是”这个

JSJavaScript创建对象 - 工厂模式 - 构造函数模式 - 原型模式 - 原型链 - 组合模式

构造函数

在java中从另一个调用一个构造函数[重复]