【问题标题】:Why am I getting this error with constructor chaining?为什么构造函数链接会出现此错误?
【发布时间】:2017-03-28 16:14:06
【问题描述】:

我收到错误“错误:递归构造函数调用”,这似乎与没有使用参数初始化的构造函数相关,并且仅使用 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());

    }

}

【问题讨论】:

  • 你觉得this(freeBags);this(bagsFee); 会怎么做?
  • this(freeBags); 调用passenger(int freeBags) 调用this(freeBags); 调用passenger(int freeBags)...
  • @Samatha 鉴于您在同一个问题上停留了几个小时,并在 StackOverflow 上提出了多个问题,我认为您应该先阅读一下……这是一个很好的地方开始:docs.oracle.com/javase/tutorial/java/javaOO/index.html
  • 类应该命名为Passenger,而不是passenger

标签: java constructor this


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2020-06-30
    • 2019-10-28
    • 2021-08-04
    • 1970-01-01
    • 2021-06-01
    相关资源
    最近更新 更多