A visibilidade, ou controle de acesso, em Java define até onde os atributos, métodos e classes podem ser acessados em um programa. Isso ajuda a proteger os dados e a controlar a forma como diferentes partes de um sistema interagem. Os principais modificadores de visibilidade são public
, private
e protected
. Neste tutorial, vamos explorar esses modificadores e como eles afetam o acesso a elementos dentro e fora de uma classe.
1. Modificador public
Quando um atributo, método ou classe é declarado como public, ele pode ser acessado por qualquer código, em qualquer lugar do programa. Não há restrições quanto ao pacote ou classe em que está sendo utilizado.
Exemplo de atributo e método public
:
class Pessoa {
// Atributos públicos
public String nome;
public int idade;
// Método público
public void exibirInformacoes() {
System.out.println("Nome: " + nome);
System.out.println("Idade: " + idade);
}
}
Acessando atributos e métodos públicos:
public class Main {
public static void main(String[] args) {
Pessoa pessoa = new Pessoa();
// Acessando atributos e métodos publicamente
pessoa.nome = "Carlos";
pessoa.idade = 30;
pessoa.exibirInformacoes();
}
}
Saída:
Nome: Carlos
Idade: 30
No exemplo acima, tanto os atributos quanto o método da classe Pessoa
são acessados diretamente de fora da classe porque são públicos.
2. Modificador private
O modificador private limita o acesso ao membro da classe ao escopo da própria classe. Isso significa que nenhuma outra classe, nem mesmo classes dentro do mesmo pacote, podem acessar diretamente esses atributos ou métodos.
Exemplo de atributos private
:
class Pessoa {
// Atributos privados
private String nome;
private int idade;
// Método público para acessar os dados
public void setNome(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
public void setIdade(int idade) {
this.idade = idade;
}
public int getIdade() {
return idade;
}
}
Acessando atributos privados com métodos públicos (getters e setters):
public class Main {
public static void main(String[] args) {
Pessoa pessoa = new Pessoa();
// Acessando atributos privados através de métodos públicos
pessoa.setNome("Ana");
pessoa.setIdade(25);
System.out.println("Nome: " + pessoa.getNome());
System.out.println("Idade: " + pessoa.getIdade());
}
}
Saída:
Nome: Ana
Idade: 25
Aqui, os atributos nome
e idade
são privados, e o acesso a eles só é possível através dos métodos públicos setNome
, getNome
, setIdade
e getIdade
. Isso garante o encapsulamento, protegendo os dados e fornecendo um controle de como eles são modificados.
3. Modificador protected
O modificador protected permite que o membro seja acessado dentro do mesmo pacote e por classes derivadas (subclasses), mesmo que essas subclasses estejam em pacotes diferentes. Esse é o comportamento intermediário entre public
e private
.
Exemplo de atributos protected
:
class Pessoa {
// Atributo protegido
protected String nome;
// Método protegido
protected void exibirNome() {
System.out.println("Nome: " + nome);
}
}
Acessando protected
dentro de uma subclasse:
class Funcionario extends Pessoa {
public void definirNome(String nome) {
this.nome = nome;
}
public void exibirNomeFuncionario() {
exibirNome();
}
}
Testando o acesso em uma classe externa:
public class Main {
public static void main(String[] args) {
Funcionario func = new Funcionario();
func.definirNome("Pedro");
func.exibirNomeFuncionario();
}
}
Saída:
Nome: Pedro
No exemplo acima, a classe Funcionario
, que herda de Pessoa
, consegue acessar o atributo nome
e o método exibirNome
, ambos protegidos. Esse comportamento é permitido porque Funcionario
é uma subclasse de Pessoa
, mesmo que esteja em um pacote diferente.
Comparação de public
, private
e protected
Modificador | Acesso na própria classe | Acesso em subclasses (mesmo pacote) | Acesso em subclasses (diferente pacote) | Acesso em qualquer lugar |
---|---|---|---|---|
public | Sim | Sim | Sim | Sim |
private | Sim | Não | Não | Não |
protected | Sim | Sim | Sim | Não |
Conclusão
O controle de visibilidade em Java através dos modificadores public
, private
e protected
é uma ferramenta poderosa para garantir que os dados de uma classe sejam acessados de maneira controlada e segura. Ao usar esses modificadores de forma adequada, você pode proteger os dados sensíveis e limitar o acesso apenas ao necessário, promovendo o encapsulamento e a reutilização eficiente de código.
Agora que você entende o papel desses modificadores, pode aplicá-los para organizar e proteger melhor seu código.