Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Duvida!!

Pessoal meu método:

public void roda(Conta c) {
        System.out.println("Saldo Anterior:" + c.saldo);
        c.atualiza(selic);
        System.out.println("Saldo Atual:" + c.saldo);
        saldoTotal += c.saldo;
    }

ele funciona e compila normalmente... porem tenho uma dúvida

o que devo usar ?

c.saldo ou c.getSaldo()

e por que ?

estou usando c.saldo porem como resposta veio c.getSaldo.. e então fiquei nessa duvida.

4 respostas

O seu atributo saldo está como private? O correto é você deixar ele como private e usar apenas o getSaldo() para recuperar o valor.

solução!

Tiago deve-se user c.getSaldo() por uma convensão do java, pois todo atributo em nossos modelos devem ser do tipo private para que ninguém possa fazer algo como:

Pessoa pes = new Pessoa("Matheus");
pes.nome = "João";

Isso seria totalmente errado pois estamos permitindo alguém modificar nossos atributos diretamente do objeto quebrando o encapsulamento de nosso modelo.

Então quando deixamos o atributo private:

private String nome;

Aquele código anterior não irá rodar, para que mesmo com o atributo private ainda consigamos modificar e pegar os valores dele devemos criar os getters e setters;

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

Assim encapsulamos nosso código e privamos que alguém mude-o seu valor diretamente pelo objeto.

Caso queira tem um post no blog da caelum detalhando mais o assunto: http://blog.caelum.com.br/nao-aprender-oo-getters-e-setters/

Espero ter ajudado.

Entendi...

agora descobri porque não deu erro, a minha classe conta está assim :

public class Conta {

    private int agencia;
    private int numeroConta;
    protected double saldo;
    private double taxa;

...
}

por causa do protected a minha outra classe não apresentou erro.

class AtualizadorDeContas {

    private double saldoTotal = 0;
    private double selic;

    public AtualizadorDeContas(double selic) {
        this.selic = selic;
    }

    public void roda(Conta c) {
        System.out.println("Saldo Anterior:" + c.saldo);
        c.atualiza(selic);
        System.out.println("Saldo Atual:" + c.saldo);
        saldoTotal += c.saldo;
    }

    public double getSaldoTotal() {
        return saldoTotal;
    }
}

mais o correto mesmo é deixar privado para que não tenha alterações que não seja da própria classe, certo ?

valeu gente..

Exatamente Tiago, procure sempre deixar os atributos de seus modelos como private, geralmente deixamos apenas métodos como public ou protected.