3
respostas

criar construtor com atributo de outra classe

professor mais se eu quiser criar um construtor com atributo que vendo de outra classe exemplo

tenho a classe Cliente e a classe Conta onde o titular estaria assim "Prinvate Cliente titular;" na classe Conta,só como visto ele está instanciando da classe Cliente certo .Agora como eu faço para criar um construtor onde passado o nome pelo parâmetro,ele coloca-se no titular e no atributo nome da classe Cliente.

3 respostas

Fala Guilherme, tudo bem ?

Você poderia fazer algo assim:

public class Conta {
    private Cliente cliente;

    public Conta(String nomeTitular) {
        this.cliente = new Cliente();
        this.cliente.setNome(nomeTitular);
    }
}

Mas perceba que assim a classe Conta toma para si muita responsabilidade sobre a classe do Cliente. Ela precisa por exemplo saber detalhes de implementação da classe Cliente. Se a classe Cliente, por exemplo, passar a receber obrigatoriamente um parametro no seu construtor a classe Conta vai ter que tratar de repassar essa possibilidade. Dizemos que as duas classes estão acopladas. Qualquer alteração na classe Cliente pode afetar a classe Conta.

Veja assim:

public class Conta {
    private Cliente cliente;

    public Conta(Cliente cliente) {
        this.cliente = cliente;
    }
}

class Programa {
    ...main(..) {
        Cliente cliente = new Cliente();
        cliente.setNome("Guilherme");

        Conta conta = new Conta(cliente);
        conta.deposita(150);
    } 
}

Assim a classe Conta que precisa de um Cliente apenas usa a referência. E se a classe Cliente muda, não afeta diretamente a Conta.

Espero ter ajudado. Abraço!

obrigado rafael, porem eu fiz desse modo que você me explicou, e ele deu esse erro, "nested Conta type cannot hide an enclosing type" sendo impossivel criar-la.

Ola Guilherme,

Desculpa pela demora na resposta. Talvez haja algo de errado com o seu código. Talvez a classe Conta esteja sendo definida dentro de outra estrutura onde não seja válida - type cannot hide an enclosing type

Poste aqui o código das suas classes pra darmos uma olhada no erro de compilação.

Abraço