sábado, 2 de junho de 2012

Java - Modificadores "protected" e "default"

Em linguagem Java sabe qual a diferença entre utilizar o Modificador de Acesso "protected" e "default" (não colocar nenhum modificador)? Essa é a pergunta campeã em matéria de dúvidas, antes de mais nada temos três modificadores de acesso:
  • public - acesso total e irrestrito.
  • private - acesso restrito a classe que o criou.
  • protected - acesso restrito ao mesmo pacote (pelo menos é assim que as pessoas entendem).
A ausência do modificador de acesso é chamado de "default" (não se usa essa palavra). Vamos observar o seguinte código:
package p1;

public class Pai {
  protected int metodo() {
    return 42;
  }
}

----------------------------------------------------

package p2;

public class Filho extends p1.Pai {
  public static void main(String [] args) {
    new Filho().teste();
  }
  public void teste() {
    System.out.println("Tenho o valor " + metodo());
  }
}
Temos uma classe Pai no pacote p1 e uma classe Filho no pacote p2 que herda a classe Pai no outro pacote e tudo funciona normalmente, porém se retiramos a palavra protected da classe Pai o código de filho não compilará mais. Então vamos mudar a definição do modificador protected:
  • protected - acesso restrito ao mesmo pacote ou subclasses de outros pacotes.
  • default -  acesso restrito ao mesmo pacote.
Isso significa que na linha de restrição: 1. private, 2. default, 3. protected e 4. public.

Obrigado e até a próxima
Fernando Anselmo