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?

questionAnswers(6)

yourAnswerToTheQuestion