Эти конструкторы перегружены для вызова другого конструктора, используя this(...)
.Первый конструктор без аргументов вызывает второй с нулевыми аргументами.Второй вызывает третий конструктор (не показан), который должен принимать значения Stock
, String
и long
.Этот шаблон, называемый конструктор цепочкой , часто используется для обеспечения нескольких способов создания экземпляров объекта без дублирования кода.Конструктор с меньшим количеством аргументов заполняет отсутствующие аргументы значениями по умолчанию, такими как new Date().getTime()
, или просто передает null
s.
Обратите внимание, что должно быть хотя бы однимконструктор, который не вызывает this(...)
, а вместо этого обеспечивает вызов super(...)
с последующей реализацией конструктора.Когда ни this(...)
, ни super(...)
не указаны в первой строке конструктора, подразумевается вызов no-arg для super()
.
Таким образом, при условии, что в * 1020 нет больше цепочек конструктора* class, третий конструктор, вероятно, выглядит следующим образом:
public Quote(Stock stock, String price, long timeInMillis) {
//implied call to super() - the default constructor of the Object class
//constructor implementation
this.stock = stock;
this.price = price;
this.timeInMillis = timeInMillis;
}
Также обратите внимание, что за вызовами this(...)
все еще может следовать реализация, хотя это отличается от шаблона цепочки:
public Quote(Stock stock, String price) {
this(stock, price, new Date().getTime());
anotherField = extraCalculation(stock);
}