Modificadores de acesso em Java
1. Visão geral
Neste tutorial, veremos modificadores de acesso em Java, que são usados para definir o nível de acesso para classes, variáveis, métodos e construtores.
Simply put, there are four access modifiers:public,private,protectededefault (sem palavra-chave).
Antes de começar, vamos notar que uma classe de nível superior pode usar modificadores de acessopublic oudefault apenas. No nível de membro, podemos usar todos os quatro.
2. Padrão
Quando não usamos nenhuma palavra-chave explicitamente, o Java definirá um acessodefault para uma determinada classe, método ou propriedade. O modificador de acesso padrão também é chamado depackage-private, o que significa queall members are visible within the same package, mas não está acessível a partir de outros pacotes:
package com.example.accessmodifiers;
public class SuperPublic {
static void defaultMethod() {
...
}
}
defaultMethod() está acessível em outra classe do mesmo pacote:
package com.example.accessmodifiers;
public class Public {
public Public() {
SuperPublic.defaultMethod(); // Available in the same package.
}
}
No entanto, não está disponível em outros pacotes.
3. Público
Se adicionarmos a palavra-chavepublic a uma classe, método ou propriedade, entãowe’re making it available to the whole world, ou seja, todas as outras classes em todos os pacotes poderão usá-lo. Este é o modificador de acesso menos restritivo:
package com.example.accessmodifiers;
public class SuperPublic {
public static void publicMethod() {
...
}
}
publicMethod() está disponível em outro pacote:
package com.example.accessmodifiers.another;
import com.example.accessmodifiers.SuperPublic;
public class AnotherPublic {
public AnotherPublic() {
SuperPublic.publicMethod(); // Available everywhere. Let's note different package.
}
}
4. Privado
Qualquer método, propriedade ou construtor com a palavra-chaveprivateis accessible from the same class only. Este é o modificador de acesso mais restritivo e é essencial para o conceito de encapsulamento. Todos os dados serão ocultados do mundo exterior:
package com.example.accessmodifiers;
public class SuperPublic {
static private void privateMethod() {
...
}
private void anotherPrivateMethod() {
privateMethod(); // available in the same class only.
}
}
5. Protegido
Entre os níveis de acessopublic eprivate, existe o modificador de acessoprotected.
Se declararmos um método, propriedade ou construtor com a palavra-chaveprotected, podemos acessar o membro desame package (as with package-private access level) and in addition from all subclasses of its class, mesmo se eles estiverem em outros pacotes:
package com.example.accessmodifiers;
public class SuperPublic {
static protected void protectedMethod() {
...
}
}
protectedMethod() está disponível em subclasses (independentemente do pacote):
package com.example.accessmodifiers.another;
import com.example.accessmodifiers.SuperPublic;
public class AnotherSubClass extends SuperPublic {
public AnotherSubClass() {
SuperPublic.protectedMethod(); // Available in subclass. Let's note different package.
}
}
6. Comparação
A tabela abaixo resume os modificadores de acesso disponíveis. Podemos ver que uma classe, independentemente dos modificadores de acesso usados, sempre tem acesso aos seus membros:
Modificador |
Classe |
Pacote |
Subclasse |
Mundo |
public |
Y |
Y |
Y |
Y |
protected |
Y |
Y |
Y |
N |
default |
Y |
Y |
N |
N |
private |
Y |
N |
N |
N |
7. Conclusão
Neste pequeno artigo, examinamos os modificadores de acesso em Java.
É uma boa prática usar o nível de acesso mais restritivo possível para qualquer membro para evitar o uso indevido. Devemos sempre usar o modificador de acessoprivate, a menos que haja um bom motivo para não fazê-lo.
O nível de acessoPublic só deve ser usado se um membro fizer parte de uma API.
Como sempre, os exemplos de código estão disponíveisover on Github.