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.
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.
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;
}
}