These constructors are overloaded to call another constructor using this(...)
. The first no-arg constructor calls the second with null arguments. The second calls a third constructor (not shown), which must take a Stock
, String
, and long
. This pattern, called constructor chaining, is often used to provide multiple ways of instantiating an object without duplicate code. The constructor with fewer arguments fills in the missing arguments with default values, such as with new Date().getTime()
, or else just passes null
s.
Note that there must be at least one constructor that does not call this(...)
, and instead provides a call to super(...)
followed by the constructor implementation. When neither this(...)
nor super(...)
are specified on the first line of a constructor, a no-arg call to super()
is implied.
So assuming there isn't more constructor chaining in the Quote
class, the third constructor probably looks like this:
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;
}
Also note that calls to this(...)
can still be followed by implementation, though this deviates from the chaining pattern:
public Quote(Stock stock, String price) {
this(stock, price, new Date().getTime());
anotherField = extraCalculation(stock);
}