4
respostas

Atributo protected

Boa noite, acabei ficando com uma dúvida no curso de Herança e Polimorfismo.

No curso está a seguinte afirmação: "Só a própria classe enxerga atributos/métodos private, enquanto protected é visto pela própria classe mais as classes filhas."

A característica protected não seria liberar a visualização para todas as classes dentro do mesmo pacote, independente da herança?

Obrigada

4 respostas

Olá Caroline, o modificador de acesso que libera a visualização somente para o mesmo pacote é modificador padrão ou seja sem nada escrito por exemplo: int idade;. O modificador protected é usado para deixar atributos e métodos visíveis somente em si mesma e em classes filhas como por exemplo:

 class Animal {
    protected int idade;
 }

 class Cachorro extends Animal {
    private String nome;

    public String idade() {
        return "Idade: " + idade;
    }
 }

Caso mude o modificador de acesso do atributo idade para privado, ocorrerá um erro de compilação, pois o atributo só será visível na própria classe que foi criado.

Espero que tenha ficado claro!

Boa noite, Obrigada pela resposta!

Porém fiz o teste no meu código e o protected libera a visualização para qualquer classe dentro do mesmo pacote, e para classes referenciadas (filhas e super classes) em pacotes diferentes. Encontrei uma explicação neste link: http://high5devs.com/2015/02/modificadores-de-acesso-em-java/

Por isso continuo confusa com a informação.

Bom dia Caroline! O modificador de acesso protected permite o acesso dentro do mesmo package e por qualquer classe herdeira em qualquer package.

Segue um pequeno resumo que fiz sobre os modificadores de acesso. (Do mais visível para o menos visível)

  • public pode ser acessado por qualquer classe de qualquer pacote.
  • protected pode ser acessado por qualquer classe dentro do pacote e por qualquer herdeiro em qualquer pacote;
  • default (private package) é o padrão ao não se colocar nenhum modificador, ele pode ser acessado por qualquer classe, desde que faça parte do mesmo pacote;
  • private só pode ser acessado dentro da mesma classe.

Espero ter ajudado.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Acredito que a dúvida já foi sanada, mas aproveitando que o post ainda está aberto, encontrei essa imagem que descreve bem os modificadores de acesso.