java - 无参数构造函数和带参数构造函数之间的关系

标签 java constructor default-constructor

请看一下以下类(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/

相关文章:

c++ - C++ 构造函数中的 'new auto'

php - 开始 oop php 问题 : do constructors take the place of getter?

c++ - 为数据缺少默认构造函数的链表创建节点

C++“不存在合适的构造函数来从<默认构造函数>转换为参数化构造函数

java.lang.NoSuchMethodError : No static method zzb(ZLjava/lang/Object;)V in class Lcom/google/android/gms/common/internal/zzaa; or its super classes 错误

java - 重新分配通用 Java 变量

c# - 在 Getter 或构造函数中初始化成员

java - 使用 apache flink 进行有状态复杂事件处理

java - Apache Camel Kafka - 聚合 kafka 消息并定期发布到不同的主题

flutter - 如何在 flutter 中初始化 WebView Controller