BankAccount.java
JavaScript
x
public class BankAccount {
private double checkingBalance;
private double savingBalance;
private static int numberOfAccounts;
public BankAccount() {
this(0, 0);
numberOfAccounts++;
}
public BankAccount(double checkingInitial, double savingInitial) {
this.checkingBalance = checkingInitial;
this.savingBalance = savingInitial;
numberOfAccounts++;
}
public static int getNumberOfAccounts() {
return numberOfAccounts;
}
Test.java
JavaScript
public class Test {
public static void main(String[] args) {
BankAccount account1 = new BankAccount(50, 50);
BankAccount account2 = new BankAccount(100, 80);
BankAccount account3 = new BankAccount();
System.out.println("number of accounts is " + BankAccount.getNumberOfAccounts());
I should get number of accounts is 3
but I’m getting 4. If I instantiate all accounts with the parametrized constuctor, I get 3. If I add BankAccount account4 = new BankAccount();
, I get 6. Is the default constructor called twice?
Advertisement
Answer
This is your problem:
JavaScript
public BankAccount() {
this(0, 0);
numberOfAccounts++; // <<<<<
}
The explicit call to the other constructor BankAccount(double, double)
increments numberOfAccounts
. Then you increment it again.
Delete the line marked ‘<<<<‘.
In answer to the question in the title:
How many times is a constructor called when it’s overloaded?
There is an explicit call to a constructor in your main program – so ‘once’. But you then wrote code in that constructor to call another constructor. That is entirely under your control.