11
respostas

Dúvida sobre setNome, GetNome

Oi pessoal tudo bem? Estou praticando meus conhecimentos e nesse momento estou tentando descobrir porque meu código não devolve o meu nome quando eu chamo o getTitular para a conta corrente 4 que eu criei e setei meu nome nela. Alguém sabe me dizer porque? Agradeço desde já!

    Cliente daniel = new Cliente();

    cc4.setTitular = daniel; //Conta Corrente 4

    daniel.setNome("Daniel Luiz Pereira");

    System.out.println(cc4.getTitular()); // Imprime null

    System.out.println(daniel.getNome()); // imprime Daniel Luiz Pereira
11 respostas

Oi Daniel

Como está o código da sua classe Cliente.java?

package br.com.bytebank.banco.modelo;

        public class Cliente {

    private String nome;
    private String cpf;
    private String profissao;

    public String getNome() {
        return this.nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCpf() {
        return cpf;
    }
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    public String getProfissao() {
        return profissao;
    }
    public void setProfissao(String profissao) {
        this.profissao = profissao;
    }

}

Você colocou

cc4.setTitular = daniel; //Conta Corrente 4

mas o "set" deveria ser um método, então a forma correta seria passar "daniel" como argumento:

cc4.setTitular(daniel); 

Manda a classe ContaCorrente tbm, por favor

Eu fiz assim também como argumento e ainda não devolve meu nome, ele devolve um código. Tem algum jeito de fazer imprimir meu nome? Tenho impressão de que já tinha feito certo outro dia mas agora não ta saindo.

    daniel.setNome("Daniel Luiz Pereira");
    cc1.setTitular(daniel);
    System.out.println(cc1.getTitular()); 

    // console imprime = br.com.bytebank.banco.modelo.Cliente@26f0a63f

Acho que tudo está de acordo com os videos. Segue a classe ContaCorrente:

    package br.com.bytebank.banco.modelo;

    //new ContaCorrente()
    public class ContaCorrente extends Conta implements Tributavel {

public Cliente setTitular;

public ContaCorrente(int agencia, int numero) {
    super(agencia, numero);
}

@Override
public void saca(double valor) throws SaldoInsuficienteException{
    double valorASacar = valor + 0.2;
    super.saca(valorASacar);
}

@Override
public void deposita(double valor) {
    super.saldo += valor;
}

@Override
public double getValorImposto() {    
    return super.saldo * 0.01;
}

@Override
public String toString() {
    return "Titular: " + this.getTitular() 
    + ", Agencia: " + super.getAgencia()
    + ", Conta " + super.toString();

}

    }

Daniel Luiz Pereira , para que exiba o nome do titular, na classe Cliente você deve criar o método toString, usando a anotação @Override, da seguinte maneira


@Override
public String toString(){
    return this.nome
}

Lembrando que o @Override é para informar que ele sobrescreve o comportamento do método toString da classe Object, a qual todas as classes extendem, e que você pode também concatenar os demais valores caso tenha interesse, ficando da seguinte forma

@Override
public String toString(){
    return "Nome: "+ this.nome + " CPF: "+this.cpf + " Profissão: "+this.profissao ;
}

Perfeito. Implementei o toString e deu certinho! Muito obrigado.

Fala Daniel, beleza?

Man, você não precisa do toString pra isso. O seu calo mesmo no momento está em entender a passagem de referencia entre as classes e eu vou tentar explicar pra você com a intenção de guiar seus estudos futuros.

nessa parte que você mencionou...

daniel.setNome("Daniel Luiz Pereira");
cc1.setTitular(daniel);
System.out.println(cc1.getTitular()); 

    // console imprime = br.com.bytebank.banco.modelo.Cliente@26f0a63f

o que você recebeu é a referencia do objeto Cliente dentro da memória pois foi exatamente o que você pediu ao printar no console "cc1.getTitular()" Percebe que a posição da memória que retorna é de Cliente e não de Conta Corrente? ... banco.modelo.Cliente@26f0a63f

Isso aconteceu porque você apontou a classe correta e esqueceu de pedir pra printar o atributo que você queria que existe dentro da classe apontada, que é seu nome. Nesse caso ficaria assim:

cc1.getTitular().getNome();

Aqui você está pedindo o nome do titular através de um método de referencia (getTitular) dentro da classe Conta Corrente.

Tem mais coisa aí no meio pra você se ligar como o atributo de composição de Cliente que você está chamando dentro da classe Conta Corrente, mas eu acho que se eu entrar nesse assunto agora você pode perder o foco principal da sua dúvida, mas qualquer coisa só falar.

Fala João Vitor Faria. Então é mais fácil do que imaginei. Eu imaginei que o jeito que eu estava fazendo não ia printar o nome, vou praticar mais com esse método. Muito obrigado!

Tranquilo, Daniel. To aqui pra ajudar no que eu puder =) A ideia aí é só você entender um pouco mais sobre composição Nessa aula aqui o Paulo dá uma explicação sobre o assunto de chamar o atributo de uma classe através de outra classe https://cursos.alura.com.br/course/java-introducao-orientacao-objetos/task/29424

Boa tarde Daniel, acredito o seu problema seja no fato de não selecionar o atributo nome do cliente (titular).

Do jeito que esta no seu código System.out.println(cc1.getTitular()); Esta tentando imprimir a referência ao objeto cliente (titular).

Então para imprimir o nome, fica dessa forma:

cc4 -> seria sua conta getTitular -> seria o objeto cliente getNome -> seria o atributo nome dentro do objeto cliente

System.out.println(cc4.getTitular().getNome());