我的构造函数没有提供所需的输出

时间:2018-01-06 17:46:57

标签: java oop object constructor

    package rups;

    public class vipcustomer{


    private String name;
    private int creditlimit;
    private String emailid;

    public vipcustomer(){
    this("Rupali", 5000, "rupalisingh@gmial.com");
    System.out.println("Constructer with default values");
    }

    public vipcustomer(int creditlimit, String emailid) {
        this("Rups", creditlimit, emailid);
        this.creditlimit = creditlimit;
        this.emailid = emailid;
        System.out.println("Constructor with 1 default values");
    }

    public vipcustomer(String name, int creditlimit, String emailid) {
        this.name = name;
        this.creditlimit = creditlimit;
        this.emailid = emailid;
        System.out.println("Constructer with no default values");
    }
    public String getName() {
        return name;
    }

    public int getCreditlimit() {
        return creditlimit;
    }

    public String getEmailid() {
        return emailid;
    }
    }

    public class Main {
        public static void main(String args[]){
            new vipcustomer();
            new vipcustomer(5000, "sdhoahfsdh");
            new vipcustomer("Rups", 7000, "dfksjdfsjdfa");


    }
    }

输出

Constructer with no default values
Constructor with 1 default values
Constructer with no default values

这里第一个构造函数应该输出" Constructor,默认值为"但事实并非如此。我做错了什么?请帮忙。

2 个答案:

答案 0 :(得分:5)

在构造函数中,您可以使用this关键字来调用同一个类中的另一个构造函数。这样做称为显式构造函数调用

让我们分析您的代码,有三个构造函数:

public vipcustomer()//------------------------------------------------(C1)
public vipcustomer(int creditlimit, String emailid)//-----------------(C2)
public vipcustomer(String name, int creditlimit, String emailid)//----(C3)

所以当你使用:

new vipcustomer();

它调用这个构造函数:

public vipcustomer() {
    this("Rupali", 5000, "rupalisingh@gmial.com");
    System.out.println("Constructer with default values");
}

但请注意this("Rupali", 5000, "rupalisingh@gmial.com");C3完成打印时调用C3

Constructor with no default values

表示第一个输出是:

Constructor with no default values

然后

Constructor with default values  

其他构造函数也一样。

this()函数根据参数列表调用重载的构造函数。

看看这个:

答案 1 :(得分:1)

导致输出错误的原因是默认构造函数。

public vipcustomer(){
    this("Rupali", 5000, "rupalisingh@gmial.com"); // Will call 3 argument constructor
    System.out.println("Constructer with default values");
}

在默认构造函数(无参数构造函数)中,您调用了

this("Rupali", 5000, "rupalisingh@gmial.com");

这意味着它将调用你提供了3个参数的构造函数。

public vipcustomer(String name, int creditlimit, String emailid) {...}

此关键字

this关键字有2个含义。在构造函数中,this(...)(与方法调用一样)充当构造函数的调用。编译器根据提供的构造函数的数字参数参数类型决定调用哪个构造函数。

在其他情况下,this关键字用作参考。