Olá, Vinícius! Tudo bem contigo?
Quando eu implanto um método abstrato dentro da minha classe pai
public abstract void deposita(double valor);
eu obrigo que minhas classes filhas implantem seus métodos. "Ditem suas regras".
Até aí acredito que esteja tudo bem!!!
Agora vai depender de como eu deixei meu Getter e meu Setter, pois eles serão minhas vias de acesso aos atributos privados.
Normalmente vemos programadores deixando seus Setters privados evitando que os dados sejam inseridos diretamente nos atributos pelas classes filhas. Criam-se construtores públicos para que esses dados sejam inseridos no momento da instância.
Já os Getters são públicos para que as filhas consultem os atributos. Como serão somente consultas e não há alterações de dados, não teria risco. Isso é não é regra, Vinícius! Somente o que vemos em grande parte dos códigos com Getters e Setters.
Sobre deixar o atributo como protected realmente não é muito bom mesmo! Para a segurança do seu código é melhor deixar seus atributos privados.
Uma dica de estrutura básica (pelo menos para estudo) seria:
- Atributos privados
- Construtores públicos (dependo se seu projeto precise de algum construtor)
- Métodos abstratos ou não (depende muitos do seu projeto também)
- Getters públicos para as filhas consultarem.
- Setters privados, jogando a responsabilidade para os construtores, que também depende da estrutura do seu projeto.
Caso queria tornar uma responsabilidade de consulta para a classe pai, deixe seus Getters privados e crie métodos públicos de consulta. É uma solução!!!
Espero ter ajudado, Vinícius!!!
Um abraço e bons estudos!