Modificador de acesso Java "privado"
1. Visão geral
Na linguagem de programação Java, campos, construtores, métodos e classes podem ser marcados comaccess modifiers. Neste tutorial, vamos falar sobre o modificador de acessoprivate em Java.
2. A palavra-chave
O modificador de acessoprivate é importante porque permite o encapsulamento e o ocultamento de informações, que são princípios básicos da programação orientada a objetos. O encapsulamento é responsável por agrupar métodos e dados, enquanto o ocultamento de informações é uma consequência do encapsulamento - ele oculta a representação interna de um objeto.
A primeira coisa a lembrar é queelements declared as private can be accessed only by the class in which they’re declared.
3. Campos
Agora, veremos alguns exemplos de código simples para entender melhor o assunto.
Primeiro, vamos criar uma classeEmployee contendo algumas variáveis de instânciaprivate:
public class Employee {
private String privateId;
private boolean manager;
//...
}
Neste exemplo, marcamos a variávelprivateId comoprivate porque queremos adicionar alguma lógica à geração de id. E, como podemos ver, fizemos a mesma coisa com o atributomanager porque não queremos permitir a modificação direta deste campo.
4. Construtores
Vamos agora criar um construtorprivate:
private Employee(String id, String name, boolean managerAttribute) {
this.name = name;
this.privateId = id + "_ID-MANAGER";
}
Ao marcar nosso construtor comoprivate, podemos usá-lo apenas de dentro de nossa classe.
Vamos adicionar um métodostatic que será nossa única maneira de usar este construtorprivate de fora da classeEmployee:
public static Employee buildManager(String id, String name) {
return new Employee(id, name, true);
}
Agora podemos obter uma instância de gerenciador de nossa classeEmployee simplesmente escrevendo:
Employee manager = Employee.buildManager("123MAN","Bob");
E, nos bastidores, é claro, o métodobuildManager chama nosso construtorprivate.
5. Métodos
Vamos agora adicionar um métodoprivate à nossa classe:
private void setManager(boolean manager) {
this.manager = manager;
}
E vamos supor, por algum motivo, que temos uma regra arbitrária em nossa empresa em que apenas um funcionário chamado "Carl" pode ser promovido a gerente, embora outras classes não saibam disso. Vamos criar um métodopublic com alguma lógica para lidar com esta regra que chama nosso métodoprivate:
public void elevateToManager() {
if ("Carl".equals(this.name)) {
setManager(true);
}
}
6. private em ação
Vejamos um exemplo de como usar nossa classeEmployee de fora:
public class ExampleClass {
public static void main(String[] args) {
Employee employee = new Employee("Bob","ABC123");
employee.setPrivateId("BCD234");
System.out.println(employee.getPrivateId());
}
}
Depois de executarExampleClass, veremos sua saída no console:
BCD234_ID
Neste exemplo, usamos o construtorpublic e o métodopublicchangeId(customId) porque não podemos acessar a variávelprivateprivateId diretamente.
Vamos verwhat happens if we try to access a private method, constructor, or variable de fora de nossa classeEmployee:
public class ExampleClass {
public static void main(String[] args) {
Employee employee = new Employee("Bob","ABC123",true);
employee.setManager(true);
employee.privateId = "ABC234";
}
}
We’ll get compilation errors para cada uma de nossas declarações ilegais:
The constructor Employee(String, String, boolean) is not visible
The method setManager(boolean) from the type Employee is not visible
The field Employee.privateId is not visible
7. Aulas
Existeone special case where we can create a private class - como uma classe interna de alguma outra classe. Caso contrário, se declarássemos uma classe externa comoprivate, estaríamos proibindo outras classes de acessá-la, tornando-a inútil:
public class PublicOuterClass {
public PrivateInnerClass getInnerClassInstance() {
PrivateInnerClass myPrivateClassInstance = this.new PrivateInnerClass();
myPrivateClassInstance.id = "ID1";
myPrivateClassInstance.name = "Bob";
return myPrivateClassInstance;
}
private class PrivateInnerClass {
public String name;
public String id;
}
}
Neste exemplo, criamos uma classe internaprivate dentro de nossoPublicOuterClass especificando o modificador de acessoprivate.
Como usamos a palavra-chaveprivate, se, por algum motivo,try to instantiate our PrivateInnerClass from outside the PublicOuterClass, o código não compilar e veremos o erro:
PrivateInnerClass cannot be resolved to a type
8. Conclusão
Neste tutorial rápido, discutimos o modificador de acessoprivate em Java. É uma boa maneira de conseguir o encapsulamento, o que leva à ocultação de informações. Como resultado, podemos garantir que expomos apenas os dados e comportamentos que queremos para outras classes.
Como sempre, o exemplo de código está disponívelover on GitHub.