A palavra-chave protected
em Java é um modificador de acesso que fornece um nível de visibilidade intermediário entre private
e public
. Ela é usada para permitir que membros (variáveis, métodos e construtores) de uma classe sejam acessados dentro do mesmo pacote e também por subclasses, mesmo que estejam em pacotes diferentes.
Sintaxe:
class MinhaClasse {
protected int numero; // Variável protegida
protected void metodoProtegido() { // Método protegido
System.out.println("Este é um método protegido.");
}
}
Posts recentes
Exemplo:
class Animal {
protected String nome;
// Construtor protegido
protected Animal(String nome) {
this.nome = nome;
}
// Método protegido
protected void fazerSom() {
System.out.println(nome + " está fazendo um som.");
}
}
class Cachorro extends Animal {
public Cachorro(String nome) {
super(nome); // Acessando o construtor protegido da classe pai
}
public void latir() {
System.out.println(nome + " está latindo.");
}
}
public class Main {
public static void main(String[] args) {
Cachorro cachorro = new Cachorro("Rex");
cachorro.fazerSom(); // Acessando o método protegido da classe pai
cachorro.latir();
}
}
Regras de visibilidade de protected
:
- Dentro do mesmo pacote:
- Membros
protected
são acessíveis por qualquer classe dentro do mesmo pacote.
- Membros
- Acesso por subclasses:
- Subclasses, mesmo que em pacotes diferentes, podem acessar membros
protected
da classe pai.
- Subclasses, mesmo que em pacotes diferentes, podem acessar membros
- Fora do pacote:
- Membros
protected
não são acessíveis por classes que não são subclasses e que estão fora do pacote da classe original.
- Membros
Características da palavra-chave protected
:
- Visibilidade no mesmo pacote: Permite acesso completo aos membros
protected
por todas as classes dentro do mesmo pacote. - Herança: Subclasses de uma classe
protected
podem acessar seus membros, mesmo estando em pacotes diferentes. - Não acessível diretamente fora do pacote: Qualquer classe fora do pacote da classe pai não pode acessar diretamente membros
protected
, a menos que seja uma subclasse.
Comparação com outros modificadores de acesso:
Modificador | Dentro da Classe | Dentro do Pacote | Em Subclasses | Fora do Pacote |
---|---|---|---|---|
private | Sim | Não | Não | Não |
default | Sim | Sim | Não | Não |
protected | Sim | Sim | Sim | Não* |
public | Sim | Sim | Sim | Sim |
*Subclasses podem acessar membros protected
mesmo estando em pacotes diferentes.
Vantagens de usar protected
:
- Herança controlada:
protected
é útil para permitir que subclasses acessem membros da classe pai, mantendo uma separação entre as classes externas. - Encapsulamento parcial: Membros
protected
são acessíveis dentro de um pacote, mas seu acesso é restrito fora dele, exceto para subclasses.
Exemplo de subclasses acessando membros protected
:
class Veiculo {
protected int velocidade;
protected void acelerar() {
velocidade += 10;
System.out.println("Velocidade: " + velocidade + " km/h");
}
}
class Carro extends Veiculo {
public void acelerarMais() {
acelerar(); // Acessando método protegido da classe Veiculo
}
}
public class Main {
public static void main(String[] args) {
Carro carro = new Carro();
carro.acelerarMais(); // Acessando método de Carro que usa método protegido
}
}
Resumo:
- A palavra-chave
protected
permite que membros de uma classe sejam acessados por outras classes no mesmo pacote e por subclasses em pacotes diferentes. - É um modificador de acesso intermediário, oferecendo mais flexibilidade que
private
e menos exposição quepublic
.