Encapsulamento em Java é um processo de agrupar código e dados em uma única unidade , por exemplo, uma cápsula que contém vários medicamentos.
comparação de leão e tigre
Podemos criar uma classe totalmente encapsulada em Java tornando privados todos os membros de dados da classe. Agora podemos usar métodos setter e getter para definir e obter os dados nele.
O Feijão Java class é o exemplo de uma classe totalmente encapsulada.
Vantagem do encapsulamento em Java
Fornecendo apenas um método setter ou getter, você pode tornar a classe somente leitura ou somente gravação . Em outras palavras, você pode pular os métodos getter ou setter.
Ele fornece a você o controle sobre os dados . Suponha que você queira definir o valor do id que deve ser maior que 100 apenas, você pode escrever a lógica dentro do método setter. Você pode escrever a lógica para não armazenar os números negativos nos métodos setter.
É uma forma de conseguir ocultação de dados em Java porque outra classe não poderá acessar os dados por meio dos membros de dados privados.
A classe encapsulada é fácil de testar . Portanto, é melhor para testes unitários.
Os IDEs padrão fornecem a facilidade de gerar getters e setters. Então é fácil e rápido criar uma classe encapsulada em Java.
Exemplo simples de encapsulamento em Java
Vejamos o exemplo simples de encapsulamento que possui apenas um campo com seus métodos setter e getter.
Arquivo: Aluno.java
//A Java class which is a fully encapsulated class. //It has a private data member and getter and setter methods. package com.javatpoint; public class Student{ //private data member private String name; //getter method for name public String getName(){ return name; } //setter method for name public void setName(String name){ this.name=name } }
Arquivo: Teste.java
//A Java class to test the encapsulated class. package com.javatpoint; class Test{ public static void main(String[] args){ //creating instance of the encapsulated class Student s=new Student(); //setting value in the name member s.setName('vijay'); //getting value of the name member System.out.println(s.getName()); } }
Compile By: javac -d . Test.java Run By: java com.javatpoint.Test
Saída:
vijay
Classe somente leitura
//A Java class which has only getter methods. public class Student{ //private data member private String college='AKG'; //getter method for college public String getCollege(){ return college; } }
Agora, você não pode alterar o valor do membro de dados da faculdade que é ‘AKG’.
s.setCollege('KITE');//will render compile time error
Classe somente gravação
//A Java class which has only setter methods. public class Student{ //private data member private String college; //getter method for college public void setCollege(String college){ this.college=college; } }
Agora, você não pode obter o valor da faculdade, você só pode alterar o valor do membro dos dados da faculdade.
System.out.println(s.getCollege());//Compile Time Error, because there is no such method System.out.println(s.college);//Compile Time Error, because the college data member is private. //So, it can't be accessed from outside the class
Outro exemplo de encapsulamento em Java
Vejamos outro exemplo de encapsulamento que possui apenas quatro campos com seus métodos setter e getter.
Arquivo: Conta.java
topologia de rede
//A Account class which is a fully encapsulated class. //It has a private data member and getter and setter methods. class Account { //private data members private long acc_no; private String name,email; private float amount; //public getter and setter methods public long getAcc_no() { return acc_no; } public void setAcc_no(long acc_no) { this.acc_no = acc_no; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public float getAmount() { return amount; } public void setAmount(float amount) { this.amount = amount; } }
Arquivo: TestAccount.java
//A Java class to test the encapsulated class Account. public class TestEncapsulation { public static void main(String[] args) { //creating instance of Account class Account acc=new Account(); //setting values through setter methods acc.setAcc_no(7560504000L); acc.setName('Sonoo Jaiswal'); acc.setEmail('[email protected]'); acc.setAmount(500000f); //getting values through getter methods System.out.println(acc.getAcc_no()+' '+acc.getName()+' '+acc.getEmail()+' '+acc.getAmount()); } }Teste agora
Saída:
7560504000 Sonoo Jaiswal [email protected] 500000.0