关于java:创建单个对象时如何执行多个构造函数

How to execute multiple constructor, when creating single object

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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");
    }
}

我试图通过以下代码来实现它-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
    }
}

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

1
2
3
4
5
6
7
8
9
10
11
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

谢谢


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


this代替Prg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    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");
    }


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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);
    }
}

您应该使用this语句。

例如

1
2
3
4
5
public Prg(int b, int c)
{
    this(b);
    System.out.println("In multiple parameter constructor");
}

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