1. Encapsulation has different use in different context, In design patterns its like behaviors that keeps changing needs to be encapsulated in abstract class, or interface.
2. Having private instance variable and public getter setter is b
3. Its mainly done to Validate the input from the user... Setting the value to an instance variable directly is dangerous.
Eg:
int dogAge;
       System.out.println("My dogs age is :"+dogAge);
Now what if someone gives a negative age... then.......???
So we must do it this way...
int dogAge;
      public void setAge(int age){
       if (age>0){
         dogAge = age;
        }
       else{
              System.out.println("Not a valid age");
           }
     }
     public int getAge(){
        return dogAge;
      }
    System.out.println("My dog age is :"+ getAge());