Essa dúvida me surgiu hoje. A implementação dos métodos da classe devem utilizar os acessadores de seus atributos ou o atributo em si? No exemplo abaixo seria (mais) correto utilizar o caso 1 ou 2?
publicclassMinhaClasse{privateintatributo=1;publicintgetAtributo(){returnatributo;}publicvoidsetAtributo(intvalue){this.atributo=value;}publicvoidprintPropriedade(){//caso 1: usando o campo privadoSystem.out.println(atributo);//caso 2: usando o acessador publicoSystem.out.println(getAtributo());}}
depende … se vc implementar regras p/ o acesso e leitura dos atributos, o ideal é usar getters e setters, que irão encapsular sua lógica.
marcosharbs
bem nesse caso como vc esta acessando dentro da classe não teria diferença, mas eu sempre uso os metodos para acessar
LuksS
Ñ ?
M
marcobiscaro2112
Exatamente o que foi dito: se você tivesse algo assim:
publicclassABC{privateJButtonbotao;publicJButtongetBotao(){if(botao==null){botao=newJButton("Olá mundo!");}returnbotao;}.........// e em outro método:newJFrame().add(getBotao(),BorderLayout.CENTER);// repare que chamamos o método, e não a variável, pois isso garante que não haverá um NullPointerException}
Porém no seu caso é indiferente.
B
Bruno_Laturner
Olhe por este lado:
Acessar atributos diretamente ou via métodos acessores dá na mesma coisa, mesmo que o atributo seja public, e uma classe externa o acesse.
O problema surge a partir do momento em que você tem que implementar regras para controlar o acesso:
:arrow: se você tiver utilizando atributos, você terá que reimplementar toda a classe (caso eles fossem public, todo o sistema)
:arrow: se você tiver utilizando métodos, somente precisará reimplementar um único método.
Pense nisso.
sobreira
Obrigado pelas respostas!
Então… o encapsulamento deve ser aproveitado inclusive na própria classe. Isto me garantirá uma manutenção menos traumática no futuro, mesmo em casos como no exemplo, onde a principio não haveria regras de controle de acesso.
Eu levantei a questão porque aqui no serviço tenho classes grandes onde há uma mistureba na forma como as variáveis privadas são acessadas dentro da própria classe, mesmo quando há métodos acessadores e isto tem dado um pouco de dor de cabeça na manutencão.