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

Classes abstratc podem conter metodos getters e setters.... ?

No quesito boa pratica de programação, supondo um exemplo de que tenho uma classe conta ...

public abstract class Conta {

        private double saldo;
        private int agencia;
        private int numero;
        private Cliente titular;
        private static int total = 0;

//Código omitido

        public abstract void deposita(double valor);

//Código omitido

E TENHO UMA OUTRA CLASSE QUE HERDA ESSA MESMA....

public class ContaCorrente extends Conta {

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

        @Override
        public boolean saca(double valor) {
                double valorASacar = valor + 0.2;
                return super.saca(valorASacar);
        }

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

Porém como o atributo "saldo" na classe conta é "private" o eclipse aponta um erro na classe ContaCorrente, no quesito boa pratica de programação é recomendável eu colocar o atributo saldo na classe conta como "protected" ou utilizar getters e setters para acessar o atributo saldo?

2 respostas

Olá Pedro, digamos que.. ao utilizar o modificador de acesso Protected você estará 'Afrouxando' ainda mais o Encapsulamento das suas variáveis pois elas passam a ter Acesso Direto e isso não é uma boa prática independente se elas são apenas visíveis para as Classes Filhas. Contudo, utilize métodos Gets e Sets para um melhor Encapsulamento e Controle de suas variáveis. :D

solução!

Pedro,

Nesse caso, uma alternativa é deixar os atributos das classes abstratas como protected para que os atributos possam ser acessados diretamente pelas suas subclasses ou classes que estejam no mesmo pacote, mas criar os métodos getters e setters para que os mesmos possam ser acessados e alterados por classes de outros pacotes, onde provavelmente será instanciado a ContaCorrente, então ainda existe a necessidade dos get e set.

Você pode utilizar private nos atributos, mas deverá acessar os mesmos através de get e set até mesmo quando for dentro de uma subclasse, que é o caso que você colocou na pergunta.

Espero ter ajudado. Bons estudos.