Comecei a aprender java há pouco tempo e algumas dúvidas estão surgindo a respeito de encapsulamento quando se trata de herança.
Aprendi que os atributos de uma classe devem ser declarados como private, pois eles só dizem respeito a ela, então apenas ela deve ter acesso direto aos seus atributos. A questão é: quando criamos os setters e getters para esses atributos estamos fornecendo um meio de acesso a eles (mesmo que indireto). Então onde fica a questão do encapsulamento já que podemos acessar e modificar esses atributos?
A pergunta pode ter ficado meio embolada, mas é pq o assunto de encapsulamento está dando um nó na minha cabeça.
Você não pode modifica-los diretamente esses atributos se eles estiverem como private, lembre-se que os atributos só estão encapsulados realmente caso estejam como private.
E estarem encapsulados também significa que não estão exposto, quero dizer não são alcançaveis atraves do . (ponto) ex:
oObjeto.altura = 5; // Suponha que ninguem possa setar um valor inferior a 10, o que voce faria?
O melhor a fazer seria construir metodos de configuração para essas variaveis de instancias que irá garantir por ex, que ninguem configure essa variavel com valor inferior a 10. ex:
public void setAltura(int alt) {e
if (alt > 10) {
altura = alt;
} else {
System.out.println(“Voce não tem permissao de setar um valor inferior a 10”);
}
}
Muito obrigado Jonas. Agora eu consegui visualizar onde fica a questão da proteção.
Não tinha passado pela minha cabeça inserir restrições dentro dos setters. Eu os imaginava apenas como um método para alterar o valor de um atributo sem fazer questionamento algum haha.