Os modificadores de acesso do Java são usados para fornecer controle de acesso no Java. O Java fornece controle de acesso através de três palavras-chave – private, protected e public. Não somos obrigados a usar esses modificadores de acesso sempre, então temos outro chamado “acesso padrão”, “pacote-privado” ou “sem modificador”.
Modificadores de Acesso do Java
Podemos usar modificadores de acesso do Java com Classes, bem como variáveis e métodos de Classe. Somos permitidos a usar apenas modificadores de acesso “public” ou “default” com classes Java.
- Se uma classe é “public”, então podemos acessá-la de qualquer lugar, ou seja, de qualquer outra classe localizada em qualquer outro pacote, etc.
- Podemos ter apenas uma classe “public” em um arquivo fonte e o nome do arquivo deve ser o mesmo que o nome da classe pública.
- Se a classe tem “acesso padrão”, então só pode ser acessada de outras classes no mesmo pacote.
Modificadores de Acesso do Java com Membro de Classe
Podemos ter todos os quatro modificadores de acesso para variáveis de membro de classe e métodos. No entanto, as regras do modificador de acesso do membro são aplicadas após as regras de acesso ao nível da classe. Por exemplo, se uma classe tiver acesso padrão, ela não será visível em outros pacotes e, portanto, os métodos e variáveis da classe também não serão visíveis. Vamos analisar cada um deles separadamente e depois mostraremos o uso dos modificadores de acesso em Java com um programa simples.
Modificadores de Acesso em Java – palavra-chave public
Se um membro da classe é “public”, ele pode ser acessado de qualquer lugar. A variável de membro ou método é acessado globalmente. Esta é a maneira mais simples de fornecer acesso aos membros da classe. No entanto, devemos ter cuidado ao usar essa palavra-chave com variáveis de classe, caso contrário, qualquer pessoa pode alterar os valores. Geralmente, as variáveis de classe são mantidas como privadas e métodos getter-setter são fornecidos para trabalhar com elas.
Modificadores de Acesso em Java – palavra-chave private
Se um membro de classe for “privado”, ele só será acessível dentro da mesma classe. Este é o acesso mais restrito e o membro de classe não será visível para o mundo exterior. Geralmente, mantemos as variáveis de classe como privadas e os métodos que são destinados a serem usados apenas dentro da classe como privados.
Modificadores de acesso do Java – palavra-chave “protected”
Se um membro de classe for “protegido”, ele será acessível apenas para as classes no mesmo pacote e para as subclasses. Este modificador é menos restrito que o privado, mas mais restrito que o acesso público. Geralmente, usamos essa palavra-chave para garantir que as variáveis de classe sejam acessíveis apenas para as subclasses.
Modificadores de acesso do Java – acesso padrão
Se um membro da classe não tiver nenhum modificador de acesso especificado, então é tratado com acesso padrão. As regras de acesso são semelhantes às das classes e o membro da classe com acesso padrão será acessível apenas às classes no mesmo pacote. Este acesso é mais restrito do que público e protegido, mas menos restrito do que privado. (Menos acessível) privado < padrão < protegido < público (Mais acessível) A tabela abaixo resume os modificadores de acesso acima com relação a diferentes classes no mesmo pacote ou em outros pacotes e subclasses. Vamos escrever algumas classes simples onde veremos os modificadores de acesso em ação.
TestA.java
package com.journaldev.access;
class TestA {
public void methodPublic(){
methodPrivate();
}
protected void methodProtected(){
methodPrivate();
}
void methodDefault(){
methodPrivate();
}
private void methodPrivate(){}
}
Observe que a classe TestA tem acesso padrão e o método da classe privada é acessível a todas as outras partes da mesma classe. TestB.java
package com.journaldev.access;
import com.journaldev.access.TestA;
public class TestB {
public static void main(String args[]) {
new TestA().methodPublic();
new TestA().methodProtected();
new TestA().methodDefault();
}
public void methodPublic() {
}
protected void methodProtected() {
}
void methodDefault() {
}
private void methodPrivate() {
}
}
Observe que TestB está no mesmo pacote que a classe TestA e, portanto, é capaz de acessar os membros de sua classe. Os membros privados não são acessíveis, mas todos os outros membros são acessíveis por causa do mesmo pacote. TestC.java
package com.journaldev.access.child;
import com.journaldev.access.TestB;
public class TestC {
public static void main(String[] args) {
new TestB().methodPublic();
}
}
A classe TestB é acessível porque é pública. Apenas os membros públicos da classe TestB são acessíveis porque a classe TestC não está no mesmo pacote nem é uma subclasse de TestB. TestE.java
package com.journaldev.util;
import com.journaldev.access.TestB;
public class TestE extends TestB {
public static void main(String[] args) {
new TestB().methodPublic();
new TestB().methodProtected(); // compile time error
// funciona, acessando o método protegido da superclasse usando a subclasse
new TestE().methodProtected();
}
}
Uma vez que a classe TestE é uma subclasse de TestB, podemos acessar os membros protegidos de TestB através da classe filha TestE. Se tentarmos acessar o método protegido da superclasse diretamente, receberemos um erro de tempo de compilação. Isso é tudo para os modificadores de acesso em Java, é simples de entender. Apenas não confunda com o acesso padrão e protegido. Uma maneira fácil de lembrar é que o acesso padrão é mais restrito do que o protegido e os membros protegidos são acessíveis em subclasses. Recentemente, fiz um vídeo para explicar detalhadamente os modificadores de acesso em Java, você pode assisti-lo abaixo no YouTube. https://www.youtube.com/watch?v=QKjnbC3UBtY
Source:
https://www.digitalocean.com/community/tutorials/java-access-modifiers