Modificadores de Acesso em Java: Tipos, Regras e Exemplos Práticos
Modificadores de Acesso em Java
Este tutorial explora os modificadores de acesso do Java, seus quatro tipos e demonstra seu uso através de exemplos claros.
O que são Modificadores de Acesso?
Em Java, os modificadores de acesso definem a visibilidade de classes, interfaces, variáveis, métodos, construtores e membros de dados. Por exemplo:
class Animal { public void metodo1() {...} private void metodo2() {...} }
No exemplo acima, metodo1 é public – acessível de qualquer classe. metodo2 é private – restrito à classe que o declara.
Estas palavras-chave – public e private – são os modificadores de visibilidade principais em Java.
Nota: Métodos getter não podem ser declarados com um modificador de acesso.
Tipos de Modificadores de Acesso
Antes de mergulhar nos modificadores, certifique-se de entender pacotes em Java.
O Java oferece quatro modificadores de visibilidade principais:
| Modificador | Descrição |
|---|---|
| Default (package‑private) | Visível apenas dentro do mesmo pacote. |
| Private | Visível exclusivamente dentro da classe declarante. |
| Protected | Visível dentro do pacote e para subclasses em outros pacotes. |
| Public | Visível em todo lugar. |
Modificador de Acesso Default
Quando nenhum modificador é especificado, o Java aplica a visibilidade default (package‑private). Por exemplo:
package pacoteDefault; class Logger { void mensagem() { System.out.println("Esta é uma mensagem"); } }
A classe Logger é acessível apenas para classes dentro de pacoteDefault. Usá-la a partir de outro pacote resulta em erro de compilação.
Modificador de Acesso Private
Declarar um membro como private restringe seu acesso à classe que o contém:
class Dados { private String nome; } public class Main { public static void main(String[] args) { Dados d = new Dados(); d.nome = "Programiz"; // ❌ erro de compilação } }
O erro ocorre porque nome é privado à classe Dados. Para expô-lo com segurança, forneça métodos acessores:
class Dados { private String nome; public String getNome() { return this.nome; } public void setNome(String nome) { this.nome = nome; } } public class Main { public static void main(String[] args) { Dados d = new Dados(); d.setNome("Programiz"); System.out.println(d.getNome()); } }
Saída:
O nome é Programiz
Observe que classes aninhadas podem ser declaradas private, mas classes e interfaces de nível superior não podem.
Nota: Java não permite que classes ou interfaces de nível superior sejam private.
Modificador de Acesso Protected
Membros marcados como protected são visíveis dentro do mesmo pacote e para subclasses em outros pacotes. Exemplo:
class Animal { protected void exibir() { System.out.println("Sou um animal"); } } class Cachorro extends Animal { public static void main(String[] args) { Cachorro c = new Cachorro(); c.exibir(); // ✅ permitido } }
Saída:
Sou um animal
Membros protected não podem ser declarados em classes ou interfaces de nível superior.
Nota: Classes e interfaces de nível superior não podem ser protected.
Modificador de Acesso Public
Membros declarados public são universalmente acessíveis:
// Animal.java public class Animal { public int qtdPatas; public void exibir() { System.out.println("Sou um animal."); System.out.println("Tenho " + qtdPatas + " patas."); } } // Main.java public class Main { public static void main(String[] args) { Animal animal = new Animal(); animal.qtdPatas = 4; animal.exibir(); } }
Saída:
Sou um animal. Tenho 4 patas.
Resumo: Animal (classe pública), qtdPatas (campo público) e exibir() (método público) são todos acessíveis a partir de Main.
Modificadores de Acesso Resumidos em Uma Figura

Os modificadores de acesso fundamentam o encapsulamento, permitindo que desenvolvedores controlem a visibilidade e protejam a integridade dos dados. Para mais sobre encapsulamento, veja Encapsulamento em Java.
Java
- Entendendo Modificadores de Acesso em C#: Public, Private, Protected, Internal e Mais
- Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
- Comentários em Java: Tipos, Uso e Boas Práticas
- Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
- Dominando Strings em Java: Criação, Métodos e Boas Práticas
- Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
- Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
- Asserções em Java: Guia Prático para Detectar Bugs e Garantir Confiabilidade do Código