Os modificadores de acesso controlam quem pode acessar atributos, métodos e classes dentro de um programa Java.
Eles são fundamentais para aplicar o princípio do encapsulamento, protegendo os dados e permitindo que apenas partes autorizadas do sistema possam acessá-los.
Java possui quatro níveis de acesso.
| Modificador | Mesma classe | Mesmo pacote | Subclasse | Outros pacotes |
|---|---|---|---|---|
| private | ✔ | ✘ | ✘ | ✘ |
| default | ✔ | ✔ | ✘ | ✘ |
| protected | ✔ | ✔ | ✔ | ✘* |
| public | ✔ | ✔ | ✔ | ✔ |
*protected pode ser acessado por subclasses localizadas em outros pacotes.
private
O modificador private restringe completamente o acesso ao próprio objeto.
É utilizado principalmente para atributos, garantindo que eles só possam ser alterados através de métodos (getters e setters).
Exemplo:
public class Conta {
private double saldo;
public void depositar(double valor){
saldo += valor;
}
public double getSaldo(){
return saldo;
}
}
Neste exemplo, ninguém consegue alterar diretamente a variável saldo.
default (sem modificador)
Quando nenhum modificador é informado, o acesso fica restrito ao mesmo pacote.
class Produto{
String nome;
}
Essa classe somente poderá ser utilizada por outras classes pertencentes ao mesmo pacote.
protected
Permite acesso:
- dentro da própria classe;
- classes do mesmo pacote;
- subclasses.
public class Animal{
protected String nome;
}
Uma classe Cachorro pode acessar o atributo nome caso herde de Animal.
public class Cachorro extends Animal{
public void mostrar(){
System.out.println(nome);
}
}
public
É o modificador mais permissivo.
Qualquer classe do projeto pode acessar membros públicos.
public class Calculadora{
public int somar(int a, int b){
return a+b;
}
}
Comparação prática
Imagine uma universidade.
- public → Biblioteca aberta para todos.
- protected → Sala disponível apenas para professores e seus assistentes.
- default → Sala acessível apenas por membros daquele departamento.
- private → Armário pessoal do professor.
Boas práticas
- Sempre utilize atributos privados.
- Exponha apenas os métodos necessários.
- Evite tornar atributos públicos.
- Utilize getters e setters quando necessário.
Exercício para praticar
Crie uma classe Pessoa contendo:
- nome (private)
- idade (private)
Implemente:
- getters
- setters
- método exibirDados()
