Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Protected e Private

Alterei de private para protected, e a classe TesteFuncionario ainda continuou funcionando com o codigo.

        Employee funcionario = new Employee();
        funcionario.setSalary(4500);
        System.out.println(funcionario.getBonus());
        System.out.println(funcionario.salary);

        Manager funcionario2 = new Manager();
        funcionario2.setSalary(2500);
        System.out.println(funcionario2.getBonus() );
3 respostas

Os atributos estão assim:

    protected String name;
    protected String cpf;
    protected double salary;
solução!

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 😉

Show Guilherme, saquei!