为什么我在构造函数链接中出现此错误?

时间:2017-03-28 16:14:06

标签: java constructor this

我收到错误"错误:递归构造函数调用",这似乎与没有使用参数初始化的构造函数关联,并且只使用this(),我拥有所有构造函数签名不同,所以我不确定问题是什么。我不知道怎么不正确使用这个()?

public class passenger{
    private int checkedBags;
    private int freeBags;
    private double bagsFee;
    public int getCheckedBags(){
        return this.checkedBags;
    }
    public void setCheckedBags(int checkedBags){
        this.checkedBags=checkedBags;
    }
    public int getFreeBags(){
        return this.freeBags;
    }
    public void setFreeBags(int freeBags){
        this.freeBags= freeBags;
    }
    public double getBagsFee(){
        return this.bagsFee;
    }
    public void setBagsFee(double bagsFee){
        this.bagsFee=bagsFee;
    }


   //all the examples I looked up online seem to correlate with one constructor not being intitialized
   passenger(int checkedBags, int freeBags, double bagsFee){//this is
        this.checkedBags= checkedBags;
        this.freeBags= freeBags;
        this.bagsFee= bagsFee;
    }
      passenger(int freeBags){
        this(freeBags);//giving error
    }
    passenger(double bagsFee){
        this(bagsFee);//giving error
    }
    passenger(){

    }
    public static void main(String[] args){
        passenger john= new passenger();
        passenger kate= new passenger(2,1,100d);
        System.out.println(john.getCheckedBags());
        System.out.println(john.getFreeBags());
        System.out.println(john.getBagsFee());

        System.out.println(kate.getCheckedBags());
        System.out.println(kate.getFreeBags());
        System.out.println(kate.getBagsFee());

    }

}

1 个答案:

答案 0 :(得分:3)

您的错误构造函数正在调用自己

passenger(int freeBags){
    this(freeBags); // what do you expect this to do?
}

"链接"涉及调用不同的构造函数,而不仅仅是重新调用相同的构造函数(它将无限地重新调用自身)。因此,例如,您可能使用默认参数调用您的第一个构造函数:

passenger(int freeBags){
    this(0, freeBags, 0.0d);
}

所以最终你有一个"主要"执行实际构造逻辑的构造函数,重载的构造函数是传递给那个构造函数的。