2
respostas

[Dúvida] Um objeto pode ser passado como parâmetro de um construtor?

Essa duvida surgiu durante o curso de OO, quando tentei colocar o titular(que é um objeto do tipo cliente) da conta como atributo obrigatório para inicia-la.

2 respostas

Consegui resolver o problema, basta criar o objeto titular antes do objeto conta que da certo a atribuição, se alguém souber outro modo de fazer pode botar ai. criando a rotina:

//rotina
    public Conta(int numero, int agencia, Cliente titular){
        total+=1;
        System.out.println("o total de contas é " + total);
        this.numero=numero;
        this.agencia=agencia;
        this.titular=titular;
    }

testando se deu certo:

public class CriaConta {

    public static void main(String[] args) {
        Cliente cliente = new Cliente();

        Conta conta = new Conta(123, 12345, cliente);

        // testando se deu certo 
        System.out.println(cliente);
        System.out.println(conta.getTitular());

    }
}

Ambos outputs retornaram : Cliente@36baf30c

Olá Bárbara, tudo bem? Sim, um objeto pode ser passado como parâmetro de um construtor. Isso é uma forma comum de inicializar os atributos de um objeto com outros objetos já existentes. No exemplo que você forneceu, a classe Conta recebe um objeto Cliente no construtor para definir o titular da conta. Isso é perfeitamente válido em Java. O motivo pelo qual você está vendo a saída "Cliente@36baf30c" é porque a classe Cliente não tem um método toString() sobrescrito. Quando você chama System.out.println(cliente), o Java chama o método toString() do objeto cliente. Como a classe Cliente não sobrescreve esse método, ele herda a implementação padrão da classe Object, que retorna o nome da classe, seguido por "@" e o hashcode hexadecimal do objeto.

Se você quiser ver informações mais significativas sobre o objeto Cliente, você pode sobrescrever o método toString() na classe Cliente. Por exemplo:

public class Cliente {
    private String nome;

// ...

    @Override
    public String toString() {
        return nome;
    }
}