请看一下以下类(class):
public class Loan {
private double annualInterestRate;
private int numberOfYears;
private double loanAmount;
private java.util.Date loanDate;
// Default constructor
public Loan() {
this(2.5, 1, 1000);
}
}
对于代码行 this(2.5, 1, 1000);
,我在 Eclipse 中收到以下错误消息:“构造函数 Loan(double, int, int) 未定义”。添加带有参数的新构造函数时,此错误消失:
// Construct a loan with specified annual interest rate, number of years and loan amount
public Loan(double annualInterestRate, int numberOfYears, int loanAmount) {
this.annualInterestRate = annualInterestRate;
this.numberOfYears = numberOfYears;
this.loanAmount = loanAmount;
loanDate = new java.util.Date();
}
为什么创建带有参数的构造函数会消除默认构造函数中的“未定义”错误?这两个不同的构造函数如何相互关联?
我如何知道 this(2.5, 1, 1000)
中的值已分配给正确的数据字段?我假设 2.5 应该分配给 annualInterestRate,1 分配给 numberOfYears,1000 分配给 loanAmount。
最佳答案
在无参数构造函数中,行
this(2.5, 1, 1000);
明确表示“为与当前构造函数相同的类调用另一个构造函数,但它接受这些参数”。
这就是为什么添加另一个构造函数可以解决问题。传递参数的顺序需要与参数在该构造函数中出现的顺序相匹配,该构造函数的参数列表定义了调用它时需要放置参数的顺序。
这两个构造函数之间的关系是链式的。具有 3 个参数的一个是主构造函数,另一个使用默认值调用主构造函数。以这种方式设计构造函数有助于一致地初始化对象,因为始终会调用单个主构造函数。 (例如,无论您调用哪个构造函数,loanDate 实例字段都会被设置。)
关于java - 无参数构造函数和带参数构造函数之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36288987/