java - Encapsulation Vs Plain -


why should use encapsulation if code below produce same result?

the main benefit of encapsulation ability modify our implemented code without breaking code of others use our code.

but can use benefit whithout using encapsulation right? because every object's field differs each other's field.

// person.java public class person {   // plain   public string name;    // uses encapsulation   private string name2;   public void setname(string name2) {     this.name2 = name2;   }   public string getname() {     return name2;   } }  // main.java public class main() {   public static void main(string[] args) {     // plain     person person = new person();     person.name = "jordan";     system.out.println(person.name);      // uses encapsulation     person person2=new person();     person2.setname("jordan");     system.out.println(person2.getname());   } } 

your question quite interesting. try answer in-depth.

the main idea behind encapsulation hide data , implementation details other users. if make data member private can accessed within same class. no other class can ever access piece of data directly.

but can define interface, i.e. public getter , setter methods update data other classes. ensures private data remains inaccessible others , can accessed public methods provide.

for instance, may decide provide getter method particular data member , no setter method. ensures no other class can change or update data member in possible way. can value if want using getter method.

this why encapsulation known data hiding.

example

public class encapsulationdemo{     private int ssn;     private string empname;     private int empage;      //getter , setter methods     public int getempssn(){         return ssn;     }      public string getempname(){         return empname;     }      public int getempage(){         return empage;     }      public void setempage(int newvalue){         empage = newvalue;     }      public void setempname(string newvalue){         empname = newvalue;     }      public void setempssn(int newvalue){         ssn = newvalue;     } } public class encapstest{     public static void main(string args[]){          encapsulationdemo obj = new encapsulationdemo();          obj.setempname("mario");          obj.setempage(32);          obj.setempssn(112233);          system.out.println("employee name: " + obj.getempname());          system.out.println("employee ssn: " + obj.getempssn());          system.out.println("employee age: " + obj.getempage());     }  } 

advantages

1) provides flexibility code , makes easily maintainable. can change implementation of getempname() or setempname() without affecting other outside code.

2) can make data members read-only (by defining getters) or write-only (by defining setters) anytime.

3) other users not knowing going on behind-the-scenes. know update data, need call settter methods , data need call getter emthods.


Comments