Eu criei uma classe com o nome pessoas e seus atributos Nome e CPF.
Como faço para que os métodos dentro da classe tenha acesso aos atributos apenas pelos métodos geter e seter e não permitir acessar o atribuo a não ser pelos metodos?
Dentro da mesma classe não dá (e nem precisa). O encapsulamento é para impedir que outras classes acessem propriedades de forma indevida (para atender alguma regra, por exemplo).
Um exemplo de uso para o encapsulamento mais simples é assim:
Em vez de só criar um método set que atribui um nome à uma pessoa, seria mais interessante criar um método que indique melhor o que será feito e já tratando algumas coisas, ex.:
public class Pessoa {
private String nome;
public String getNome() {
return this.nome;
}
public void alterarNome(String novoNome) {
if (novoNome == null || "".equals(novoNome)) {
throw new IllegalArgumentException("Novo nome informado não é valido!");
}
if (novoNome.length() < 3) {
throw new IllegalArgumentException("Novo nome deve ter pelo menos 3 letras!");
}
this.nome = novoNome;
}
}
E ao usar:
Pessoa pessoa = new Pessoa();
pessoa.alterarNome(""); // erro pois não é um nome válido
pessoa.alterarNome("Lu"); // erro pois possui menos do que 3 letras
pessoaRepository.save(pessoa); // não vai salvar pq caiu nas validações
Dessa forma, em todo o sistema, qualquer funcionalidade que for alterar o nome de uma Pessoa, irá passar pelas mesmas validações para garantir que a pessoa tenha um nome de acordo com as regras.
Então, lembra aquela ajuda que pedi para você sobre as requisições do PK PARTIC então tentei implementar ela em Java, para praticar a orientação a objetos e conhecer um pouco mais dos recursos.
Segue o link postado no github
Depois se você quiser dar uma olhada e sugerir alguma melhoria em questão de sintaxe ou algo do tipo, sou aberto a sugestões.
Pois num futuro não tão distante pretendo trabalhar só com java rsrs