Olá Matheus! Tudo bem?
Ótima observação que você fez!
Acontece que o modificador de acesso protected
permite o acesso às classes filhas e classes no mesmo pacote.
Quando você realiza a troca do modificador private
por protected
, acontece que as classes que herdam de Employee
passam a poder acessar os seus atributos, sem a necessidade dos métodos get
e set
.
Isso significa que o código continuará funcionando, sem problemas aparentes... mas por conta do uso do modificador de acesso protected
outras classes que poderiam estar presentes no mesmo pacote, teriam acesso aos atributos dessa classe, e não é interessante que permitamos isso. Desejamos permitir o acesso somente à classes que sabemos que necessitam de tal acesso.
Vale a pena lembrar do efeito que temos ao utilizar cada um dos modificadores de visibilidade:
Private
: A única classe que tem acesso ao atributo é a própria classe que o define. Ou seja, nenhuma outra classe pode acessar o atributo ou método que recebe o modificador private
.
Default
: Tem acesso a um atributo default (identificado pela ausência de modificadores) todas as classes que estiverem no mesmo pacote que a classe que possui o atributo.
Protected
: Esse é o que geralmente nos confunde, ele tem um efeito semelhante ao default, com a diferença de que se uma classe (mesmo que esteja fora do pacote) estende da classe com o atributo protected, ela terá acesso a ele. Então o acesso é por pacote e por herança.
Public
: Todos tem acesso.
A explicação ficou clara?
Se precisar de mais ajuda, é só falar 😉