Modificadores de Acesso em Java

Java modificadores de acesso são usados para fornecer controle de acesso em Java. 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” (default access), “pacote-privado” (package-private) ou “nenhum modificador” (no modifier).

Modificadores de Acesso em Java

Podemos usar modificadores de acesso em Java com Classes, bem como variáveis e métodos de Classe. Somos permitidos usar apenas modificadores de acesso “public” ou “default” com classes Java.

  1. Se uma classe é “public”, então podemos acessá-la de qualquer lugar, ou seja, de qualquer outra classe localizada em qualquer outro pacote, etc.
  2. 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.
  3. Se a classe tiver “acesso padrão”, então ela só pode ser acessada por outras classes no mesmo pacote.

Modificadores de Acesso em Java com Membro de Classe

Podemos ter todos os quatro modificadores de acesso para variáveis de membro e métodos de uma classe. No entanto, as regras do modificador de acesso de membro são aplicadas após as regras de acesso em nível de 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 for “público”, 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 da classe for “privado”, ele será acessível apenas dentro da mesma classe. Esse é o acesso mais restrito e o membro da classe não será visível para o mundo externo. 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 em Java – palavra-chave protegido

Se um membro da classe for “protegido”, ele será acessível apenas às classes no mesmo pacote e às subclasses. Esse 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 às subclasses.

Modificadores de Acesso em Java – acesso padrão

Se um membro da classe não tiver nenhum modificador de acesso especificado, ele será tratado com acesso padrão. As regras de acesso são semelhantes às classes, e o membro da classe com acesso padrão será acessível apenas às classes no mesmo pacote. Esse 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 em relação a diferentes classes no mesmo pacote ou em outros pacotes e subclasses. Vamos escrever algumas classes simples para ver os modificadores de acesso do Java 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, consegue acessar os membros de sua classe. Membros privados não são acessíveis, mas todos os outros membros são acessíveis devido ao 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. Somente 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();

	}

}

Como 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 se 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 explicando 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