Java Encapsulation
Encapsulation is one of the four fundamental OOP concepts. The other three are inheritance, polymorphism, and abstraction.
Encapsulation in Java is a mechanism of wrapping the data (variables) and code acting on the data (methods) together as a single unit. In encapsulation, the variables of a class will be hidden from other classes, and can be accessed only through the methods of their current class. Therefore, it is also known as data hiding.
Achieving Encapsulation in Java
To achieve encapsulation in Java −
- Declare the variables of a class as private.
- Provide public setter and getter methods to modify and view the variables values.
Java Encapsulation Example
Following is an example that demonstrates how to achieve Encapsulation in Java −
/* File name : EncapTest.java */publicclassEncapTest{privateString name;privateString idNum;privateint age;publicintgetAge(){return age;}publicStringgetName(){return name;}publicStringgetIdNum(){return idNum;}publicvoidsetAge(int newAge){
age = newAge;}publicvoidsetName(String newName){
name = newName;}publicvoidsetIdNum(String newId){
idNum = newId;}}
The public setXXX() and getXXX() methods are the access points of the instance variables of the EncapTest class. Normally, these methods are referred as getters and setters. Therefore, any class that wants to access the variables should access them through these getters and setters.
The variables of the EncapTest class can be accessed using the following program −
/* File name : RunEncap.java */publicclassRunEncap{publicstaticvoidmain(String args[]){EncapTest encap =newEncapTest();
encap.setName("James");
encap.setAge(20);
encap.setIdNum("12343ms");System.out.print("Name : "+ encap.getName()+" Age : "+ encap.getAge());}}publicclassEncapTest{privateString name;privateString idNum;privateint age;publicintgetAge(){return age;}publicStringgetName(){return name;}publicStringgetIdNum(){return idNum;}publicvoidsetAge(int newAge){
age = newAge;}publicvoidsetName(String newName){
name = newName;}publicvoidsetIdNum(String newId){
idNum = newId;}}
Output
Name : James Age : 20
Benefits of Encapsulation
- The fields of a class can be made read-only or write-only.
- A class can have total control over what is stored in its fields.
Java Encapsulation: Read-Only Class
A read-only class can have only getter methods to get the values of the attributes, there should not be any setter method.
Example: Creating Read-Only Class
In this example, we defined a class Person with two getter methods getName() and getAge(). These methods can be used to get the values of attributes declared as private in the class.
// Class "Person"classPerson{privateString name ="Robert";privateint age =21;// Getter methodspublicStringgetName(){returnthis.name;}publicintgetAge(){returnthis.age;}}publicclassMain{publicstaticvoidmain(String args[]){// Object to Person classPerson per =newPerson();// Getting and printing the valuesSystem.out.println("Name of the person is: "+ per.getName());System.out.println("Age of the person is: "+ per.getAge());}}
Output
Name of the person is: Robert
Age of the person is: 21
Java Encapsulation: Write-Only Class
A write-only class can have only setter methods to set the values of the attributes, there should not be any getter method.
Example: Creating Write-Only Class
In this example, we defined a class Person with two setter methods setName() and setAge(). These methods can be used to set the values of attributes declared as private in the class.
// Class "Person"classPerson{privateString name;privateint age;// Setter MethodspublicvoidsetName(String name){this.name = name;}publicvoidsetAge(int age){this.age = age;}}publicclassMain{publicstaticvoidmain(String args[]){// Object to Person classPerson per =newPerson();// Setting the values
per.setName("Robert");
per.setAge(21);}}
Java Encapsulation: More Examples
Example 1: Person Class (Fully Encapsulated)
This example creates a fully encapsulated class named “Person”. This class has private class attributes, setter, and getter methods.
// Class "Person"classPerson{privateString name;privateint age;// Setter MethodspublicvoidsetName(String name){this.name = name;}publicvoidsetAge(int age){this.age = age;}// Getter methodspublicStringgetName(){returnthis.name;}publicintgetAge(){returnthis.age;}}// The Main class to test encapsulated class "Person"publicclassMain{publicstaticvoidmain(String args[]){// Objects to Person classPerson per1 =newPerson();Person per2 =newPerson();// Setting the values
per1.setName("Robert");
per1.setAge(21);
per2.setName("Riyan");
per2.setAge(22);// Printing the valuesSystem.out.println("Person 1: Name : "+ per1.getName()+" Age : "+ per1.getAge());System.out.println("Person 2: Name : "+ per2.getName()+" Age : "+ per2.getAge());}}
Output
Person 1: Name : Robert Age : 21
Person 2: Name : Riyan Age : 22
Example 2: Employee Class (Fully Encapsulated)
This example creates a fully encapsulated class named “Employee”. This class has private class attributes, setter, and getter methods.
// Class "Employee"classEmployee{privateString emp_name;privateString emp_id;privatedouble net_salary;// ConstructorpublicEmployee(String emp_name,String emp_id,double net_salary){this.emp_name = emp_name;this.emp_id = emp_id;this.net_salary = net_salary;}// Getter methodspublicStringgetEmpName(){return emp_name;}publicStringgetEmpId(){return emp_id;}publicdoublegetSalary(){return net_salary;}// Setter methodspublicvoidsetEmpName(String emp_name){this.emp_name = emp_name;}publicvoidsetEmpId(String emp_id){this.emp_id = emp_id;}publicvoidsetSalary(double net_salary){this.net_salary = net_salary;}}// The Main class to test encapsulated class "Employee"publicclassMain{publicstaticvoidmain(String args[]){// Objects to Employee class// First object - setting values using constructorEmployee emp =newEmployee("Robert","EMP001",75450.00);// Printing dataSystem.out.println("Employee (Intial Values):");System.out.println(emp.getEmpId()+" , "+ emp.getEmpName()+" , "+ emp.getSalary());// Updating values using setter methods
emp.setEmpName("Riyan");
emp.setEmpId("EMP002");
emp.setSalary(90500.00);// Printing dataSystem.out.println("Employee (Updated Values):");System.out.println(emp.getEmpId()+" , "+ emp.getEmpName()+" , "+ emp.getSalary());}}
Output
Employee (Intial Values):
EMP001 , Robert , 75450.0
Employee (Updated Values):
EMP002 , Riyan , 90500.0
Leave a Reply