Em programação, modificadores de acesso são palavras-chave que determinam o nível de visibilidade e acesso de um elemento (atributo, método, classe etc.) em uma classe ou objeto.
Os modificadores de acesso são importantes porque permitem que o acesso a membros de uma classe seja controlado, o que pode ajudar a garantir a integridade dos dados e aumentar a segurança do código.
Há 4 tipos de modificadores de acesso ou visibilidade:
- private - privado: torna um elemento acessível somente dentro da classe em que está definido, ou seja, não pode ser acessado de outras classes ou objetos.
# protected - protegido: torna um elemento acessível dentro da mesma classe e de subclasses da classe em que está definido, mas não pode ser acessado por objetos de outras classes de fora da herança.
~ package - pacote: torna um elemento acessível dentro do mesmo pacote em que está definido, mas não pode ser acessado por classes em outros pacotes.
+ public - público: torna um elemento acessível a qualquer classe ou objeto, independentemente de sua localização no código.
private
Privado (-):
O elemento privado só é
acessível pelas operações
do objeto. Normalmente este é o
estado inicial dos atributos, depois
se necessário, pode ser modificado.
protected
Protegido (#):
O elemento só pode ser acessado por uma classe que tenha uma relação de generalização/herança,
independente do pacote.
package
Pacote (~):
O elemento pode ser acessado por
qualquer outra classe no mesmo pacote.
public
Público (+):
O elemento pode ser acessado por
qualquer outra classe do sistema.
Em Java, os modificadores de acesso default para Classes, Método e Atributos garante o acesso de pacote (package).
Isso significa que, se você não especificar um modificador de acesso para uma classe, método ou atributo estes serão considerados como default.
package com.example;
class MinhaClasse {
// código da classe aqui
}
Neste exemplo, a classe MinhaClasse não tem um modificador de acesso explícito, o que significa que ela é default e só pode ser acessada a partir de outras classes dentro do mesmo pacote com.example. Se tentarmos acessar esta classe a partir de uma classe fora desse pacote, obteremos um erro de compilação.
package com.example;
public class MinhaClasse {
int meuAtributo; // modificador de acesso default
// código da classe aqui
}
Neste exemplo, o atributo meuAtributo não tem um modificador de acesso explícito, o que significa que ele é default e só pode ser acessado a partir de outras classes dentro do mesmo pacote com.example. Se tentarmos acessar este atributo a partir de uma classe fora desse pacote, obteremos um erro de compilação.
package com.example;
public class MinhaClasse {
void meuMetodo() {
// código do método aqui
}
}
Neste exemplo, o método meuMetodo() não tem um modificador de acesso explícito, o que significa que ele é default e só pode ser acessado a partir de outras classes dentro do mesmo pacote com.example. Se tentarmos acessar este método a partir de uma classe fora desse pacote, obteremos um erro de compilação.