Encapsulamento Java
Encapsulamento
O significado de Encapsulation , é garantir que os dados "sensíveis" estejam ocultos dos usuários. Para conseguir isso, você deve:
- declarar variáveis/atributos de classe como
private
- fornecer métodos get
e set públicos para acessar e atualizar o valor de uma
private
variável
Obter e definir
Você aprendeu no capítulo anterior que private
as variáveis só podem ser acessadas dentro da mesma classe (uma classe externa não tem acesso a ela). No entanto, é possível acessá-los se fornecermos métodos públicos get e set .
O get
método retorna o valor da variável e o set
método define o valor.
A sintaxe para ambos é que eles começam com get
ou set
, seguido pelo nome da variável, com a primeira letra em maiúscula:
Exemplo
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
Exemplo explicado
O get
método retorna o valor da variável name
.
O set
método pega um parâmetro ( newName
) e o atribui à
name
variável. A this
palavra-chave é usada para se referir ao objeto atual.
No entanto, como a name
variável é declarada como private
, não
podemos acessá-la de fora desta classe:
Exemplo
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // error
System.out.println(myObj.name); // error
}
}
Se a variável foi declarada como public
, esperaríamos a seguinte saída:
John
No entanto, ao tentarmos acessar uma private
variável, recebemos um erro:
MyClass.java:4: error: name has private access in Person
myObj.name = "John";
^
MyClass.java:5: error: name has private access in Person
System.out.println(myObj.name);
^
2 errors
Em vez disso, usamos os métodos getName()
e setName()
para acessar e atualizar a variável:
Exemplo
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.setName("John"); // Set the value of the name variable to "John"
System.out.println(myObj.getName());
}
}
// Outputs "John"
Por que Encapsulamento?
- Melhor controle de atributos e métodos de classe
- Os atributos de classe podem ser somente leitura (se você usar apenas o
get
método) ou somente gravação (se você usar apenas oset
método) - Flexível: o programador pode alterar uma parte do código sem afetar outras partes
- Maior segurança dos dados