Construtores

Sou iniciante e gostaria de sanar a seguinte dúvida:
Segue o código…

public class Conta {
Cliente titular;
private int numero;
private double saldo;
private double limite;
private static int totalDeContas;

public int getNumero() {
	return numero;
}

public void setNumero(int numero) {
	this.numero = numero;
}

public double getSaldo() {
	return saldo;
}

public void setSaldo(double saldo) {
	this.saldo = saldo;
}

public double getLimite() {
	return limite;
}

public void setLimite(double limite) {
	this.limite = limite;
}

public static int getTotalDeContas() {
	return Conta.totalDeContas;
}

Conta(Cliente titular){
	this.titular = titular;
}

Conta(int numero, Cliente titular){
	this(titular);
	this.numero = numero;
}

Conta(){
	Conta.totalDeContas = Conta.totalDeContas + 1;
}	

}

public class Cliente {
private String nome;
private String cpf;
private static int totalDeClientes;

Cliente(){
	this.totalDeClientes = totalDeClientes + 1;
}

public String getNome(){
	return this.nome;
}

public void setNome(String nome){
	this.nome = nome;
}

public String getCpf(){
	return this.cpf;
}

public void setCpf(String cpf){
	this.cpf = cpf;
}

public static int getTotalDeClientes(){
	return Cliente.totalDeClientes;
}

}

public class Programa {

public static void main(String[] args) {
	Conta conta = new Conta();
	int totalContas = Conta.getTotalDeContas();
	int totalClientes = Cliente.getTotalDeClientes();
	System.out.println(totalContas);
	System.out.println(totalClientes);
}

}
Total de contas: 1
Total de clientes: 0

Porque o total de clientes é 0 (zero) se toda vez que um objeto conta é criado, um cliente também é criado?

Pelo que eu notei você não criou uma nova instância de Cliente, somente uma de Conta.

Dentro da classe Conta você tem um atríbuto de Cliente mas em nenhum momento é instanciado.

Tente fazer isso:

public static void main(String[] args) {
	Conta conta = new Conta();
        new Cliente(); // <- criando uma nova instância
	int totalContas = Conta.getTotalDeContas();
	int totalClientes = Cliente.getTotalDeClientes();
	System.out.println(totalContas);
	System.out.println(totalClientes);
}

Ou na classe de Conta modifique o método:

Conta(){
        Conta.totalDeContas = Conta.totalDeContas + 1;
        this.titular = new Cliente(); // crie uma nova instância de cliente
}

Mas por Cliente ser um atributo de Conta “Cliente titular”, a partir do momento que instancio Conta, um Cliente já é instanciado. Estou errado?

Está, ele sendo um atríbuto da classe Conta não quer dizer que ele vai ser instanciado.

Veja no exemplo

   public static void main(String args[])
    {
       Conta conta = new Conta();
        int totalContas = Conta.getTotalDeContas();
        int totalClientes = Cliente.getTotalDeClientes();
        System.out.println(totalContas);
        System.out.println(totalClientes);
        
        if(conta.titular == null){
            System.out.println("Titular está nulo");
        }else{
            System.out.println("Titular não está nulo");
        }
    }

Saída: Titular está nulo

Acho que você deve estar se confundindo com Herança, não é isso?

Desculpe a demora!
Depois de alguns estudos aqui, entendi. E sim. Acho que vou resolver isso da forma que estou tentando através de herança. Muito obrigado, @Paulo_Castro_91. :slightly_smiling: