Por que é recomendado declarar variáveis de instância como privadas?
Minha pergunta está relacionada ao Java, mas também pode ser aplicada ao C #. Eu estava me perguntando por que todo mundo recomenda fazer as variáveis de instânciaprivado ao contrário de fazê-losprotegido.
Vamos apenas pensar sobre isso. Variáveis privadas não são vistas pela subclasse, então se eu precisar acessar ou alterar as variáveis da superclasse na minha subclasse, eu sou forçado a usar algum método de acesso e mutação comogetMyPrivateVariable
ousetMyPrivateVariable
. Mas quando você estende alguma classe e herda seus membros, isso funciona como se você os declarasse diretamente na subclasse. Então, logicamente, isso significa que a subclasse também deve ter acesso direto às variáveis de instância e faz um caso para projetar a classe com variáveis protegidas. Eu entendo que tal prática quebraria o encapsulamento, mas isso parece irrelevante no caso da herança, porque, novamente, neste caso, tudo funciona como se os membros da superclasse fossem declarados na subloca, então a subloca tem um "direito natural". por poder acessar seus membros diretamente, não importando se foram herdados ou não. O encapsulamento, na minha opinião, é mais importante para a interface com o objeto por outros objetos que estão fora da árvore de herança do objeto.
Então, minha pergunta é por que todo mundo recomenda declarar variáveis de instância da classe como privada em oposição a protegida?