Android Abstraction & Encapsulation



Abstraction 
It shows necessary details of a class such like variables, methods, objects and etc (Ex : In Car Riding we just known about how to drive it and don't want to know about the inner process of that Car..). Here also same like that, we don't want to know about the inner process of variable, methods, objects and etc..   It's just a abstract of a Class. 

Encapsulation 
It provides Security for a Class through Access Specifiers.  
  1. Use Access Specifier in Android. 
  2. Public Access Specifier. 
  3. Protected Access Specifier. 
  4. Private Access Specifier. 

1.Use Access Specifier in Android. 

Step 1 : Select File -> New -> Project -> Android Application Project (or) Android Project. Fill the forms and click "Finish" button. If you have any doubt regarding create a new project Click Here. 
  
Step 2 : Open res -> layout -> activity_main.xml (or) main.xml and add following code : 

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   xmlns:tools="http://schemas.android.com/tools"  
   android:layout_width="match_parent"  
   android:layout_height="match_parent" >  
   <Button  
     android:id="@+id/button1"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignParentTop="true"  
     android:layout_centerHorizontal="true"  
     android:layout_marginTop="48dp"  
     android:text="Encapsulation" />  
   <TextView  
     android:id="@+id/textView1"  
     android:textSize="15dp"  
     android:lineSpacingMultiplier="1.5"  
     android:gravity="center"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_centerHorizontal="true"  
     android:layout_marginTop="180dp" />  
   <TextView  
     android:id="@+id/textView2"  
     android:textSize="15dp"  
     android:lineSpacingMultiplier="1.5"  
     android:gravity="center"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_centerHorizontal="true"  
     android:layout_marginTop="250dp" />  
   <TextView  
     android:id="@+id/textView3"  
     android:textSize="15dp"  
     android:lineSpacingMultiplier="1.5"  
     android:gravity="center"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_centerHorizontal="true"  
     android:layout_marginTop="320dp" />  
 </RelativeLayout>  

  
Step 3 : Open src -> package -> MainActivity.java and add following code :package
 com.gudivada.hemanthsomaraju;   
 import android.os.Bundle;   
 import android.app.Activity;   
 import android.view.Menu;   
 import android.view.View;   
 import android.widget.Button;   
 import android.widget.TextView;   
 public class MainActivity extends Activity {   
 Button Encapsulate;   
 TextView tv1, tv2, tv3;   
   @Override   
   public void onCreate(Bundle savedInstanceState) {   
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.activity_main);   
     Encapsulate = (Button) findViewById(R.id.button1);   
     tv1 = (TextView) findViewById(R.id.textView1);   
     tv2 = (TextView) findViewById(R.id.textView2);   
     tv3 = (TextView) findViewById(R.id.textView3);   
     Encapsulate.setOnClickListener(new View.OnClickListener() {   
 public void onClick(View v) {   
 // TODO Auto-generated method stub   
 B obj = new B();   
 tv1.setText(obj.display_public());   
 tv2.setText(obj.display_protected());   
 tv3.setText(obj.display_private());   
 }   
 });   
   }   
   @Override   
   public boolean onCreateOptionsMenu(Menu menu) {   
     getMenuInflater().inflate(R.menu.main, menu);   
     return true;   
   }   
 }   
 class A   
 {   
 public String str1 = null;   
 protected String str2 = null;   
 private String str3 = null;   
 A()   
 {   
 str1 = "Class A Public String";   
 str2 = "Class A Protected String";   
 str3 = "Class A Private String";   
 }   
 }   
 class B extends A   
 {   
 private String str3 = "Class B Private String";   
 B()   
 {   
 str1 = str1.concat(" & Shared By Hemanth");   
 str2 = str2.concat(" & Shared By Hemanth");   
 str3 = str3.concat(" & Not Shared By Hemanth");   
 }   
 String display_public()   
 {   
 return str1;   
 }   
 String display_protected()   
 {   
 return str2;   
 }   
 String display_private()   
 {   
 return str3;   
 }   
 }   


Step 4 : Open AndroidManifest.xml and add following code :

 <?xml version="1.0" encoding="utf-8"?>   
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"   
   package="com.gudivada.hemanthsomaraju"   
   android:versionCode="1"   
   android:versionName="1.0" >   
   <uses-sdk   
     android:minSdkVersion="8"   
     android:targetSdkVersion="18" />   
   <application   
     android:allowBackup="true"   
     android:icon="@drawable/ic_launcher"   
     android:label="@string/app_name"   
     android:theme="@style/AppTheme" >   
     <activity   
       android:name="com.gudivada.hemanthsomaraju.MainActivity"   
       android:label="@string/app_name" >   
       <intent-filter>   
         <action android:name="android.intent.action.MAIN" />   
         <category android:name="android.intent.category.LAUNCHER" />   
       </intent-filter>   
     </activity>   
   </application>   
 </manifest>   


Step 5 : Our output will be like this :
Image Image 

2.Public Access Specifier. 

Step 1 : Select File -> New -> Project -> Android Application Project (or) Android Project. Fill the forms and click "Finish" button. If you have any doubt regarding create a new project Click Here. 
  
Step 2 : Open res -> layout -> activity_main.xml (or) main.xml and add following code : 

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   
   xmlns:tools="http://schemas.android.com/tools"   
   android:layout_width="match_parent"   
   android:layout_height="match_parent" >   
   <Button   
     android:id="@+id/button1"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_alignParentTop="true"   
     android:layout_centerHorizontal="true"   
     android:layout_marginTop="60dp"   
     android:text="Add 1 with Public Value" />   
   <Button   
     android:id="@+id/button2"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_alignParentTop="true"   
     android:layout_centerHorizontal="true"   
     android:layout_marginTop="150dp"   
     android:text="Multiply 2 with Public Value" />   
   <TextView   
     android:id="@+id/textView1"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_below="@+id/button2"   
     android:layout_centerHorizontal="true"   
     android:text="Hemanth Somaraju"   
     android:textAppearance="?android:attr/textAppearanceLarge" />   
 </RelativeLayout>   


Step 3 : Open src -> package -> MainActivity.java and add following code : 

 package com.gudivada.hemanthsomaraju;   
 import android.os.Bundle;   
 import android.app.Activity;   
 import android.view.Menu;   
 import android.view.View;   
 import android.widget.Button;   
 import android.widget.Toast;   
 public class MainActivity extends Activity {   
   public int value = 10;   
   Button b1, b2;   
   @Override   
   public void onCreate(Bundle savedInstanceState) {   
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.activity_main);   
     b1 = (Button) findViewById(R.id.button1);   
     b2 = (Button) findViewById(R.id.button2);   
     b1.setOnClickListener(new View.OnClickListener() {   
 public void onClick(View v) {   
 // TODO Auto-generated method stub   
 value = value + 1;   
 display(value);   
 }   
 });       
     b2.setOnClickListener(new View.OnClickListener() {   
 public void onClick(View v) {   
 // TODO Auto-generated method stub   
 value = value * 2;   
 display(value);   
 }   
 });      
   }   
   public void display(int val) {   
    Toast.makeText(getBaseContext(), String.valueOf(val),   
 Toast.LENGTH_SHORT).show();   
   }   
   @Override   
   public boolean onCreateOptionsMenu(Menu menu) {   
     getMenuInflater().inflate(R.menu.main, menu);   
     return true;   
   }   
 }   



Step 4 : Open AndroidManifest.xml and add following code : 
 <?xml version="1.0" encoding="utf-8"?>   
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"   
   package="com.gudivada.hemanthsomaraju"   
   android:versionCode="1"   
   android:versionName="1.0" >   
   <uses-sdk   
     android:minSdkVersion="8"   
     android:targetSdkVersion="18" />   
   <application   
     android:allowBackup="true"   
     android:icon="@drawable/ic_launcher"   
     android:label="@string/app_name"   
     android:theme="@style/AppTheme" >   
     <activity   
       android:name="com.gudivada.hemanthsomaraju.MainActivity"   
       android:label="@string/app_name" >   
       <intent-filter>   
         <action android:name="android.intent.action.MAIN" />   
         <category android:name="android.intent.category.LAUNCHER" />   
       </intent-filter>   
     </activity>   
   </application>   
 </manifest>   
Step 6 : Our output will be like this : 
  
  
ImageImage 
 Image 
   

3.Protected Access Specifier. 

Step 1 : Select File -> New -> Project -> Android Application Project (or) Android Project. Fill the forms and click "Finish" button. If you have any doubt regarding create a new project Click Here. 
  
Step 2 : Open res -> layout -> activity_main.xml (or) main.xml and add following code : 

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   
   xmlns:tools="http://schemas.android.com/tools"   
   android:layout_width="match_parent"   
   android:layout_height="match_parent" >   
   <Button   
     android:id="@+id/button1"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_alignParentTop="true"   
     android:layout_centerHorizontal="true"   
     android:layout_marginTop="50dp"   
     android:text="Get 1st Child-Class Value" />   
   <Button   
     android:id="@+id/button2"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_alignParentTop="true"   
     android:layout_centerHorizontal="true"   
     android:layout_marginTop="120dp"   
     android:text="Get 2nd Child-Class Value" />   
   <TextView   
     android:id="@+id/textView1"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_below="@+id/button2"   
     android:layout_centerHorizontal="true"   
     android:layout_marginTop="16dp"   
     android:text="Hemanth Somaraju"   
     android:textAppearance="?android:attr/textAppearanceLarge" />   
 </RelativeLayout>   


Step 3 : Open src -> package -> MainActivity.java and add following code : 

 package com.gudivada.hemanthsomaraju;   
 import android.os.Bundle;   
 import android.app.Activity;   
 import android.view.Menu;   
 import android.view.View;   
 import android.widget.Button;   
 import android.widget.Toast;   
 public class MainActivity extends Activity {   
 Button b1, b2;   
   @Override   
   public void onCreate(Bundle savedInstanceState) {   
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.activity_main);   
     b1 = (Button) findViewById(R.id.button1);   
     b2 = (Button) findViewById(R.id.button2);   
     final SubClass1 obj1 = new SubClass1();   
     final SubClass2 obj2 = new SubClass2();       
     b1.setOnClickListener(new View.OnClickListener() {   
 @Override   
 public void onClick(View v) {   
 // TODO Auto-generated method stub   
 String value1 = obj1.display1();   
 display(value1);   
 }   
 });   
     b2.setOnClickListener(new View.OnClickListener() {   
 @Override   
 public void onClick(View v) {   
 // TODO Auto-generated method stub   
 String value2 = obj2.display2();   
 display(value2);   
 }   
 });       
   }   
   public void display(String val) {   
    Toast.makeText(getBaseContext(), val, Toast.LENGTH_SHORT).show();   
   }   
   @Override   
   public boolean onCreateOptionsMenu(Menu menu) {   
     getMenuInflater().inflate(R.menu.main, menu);   
     return true;   
   }   
 }   
 class SubClass {   
 protected String value = "Success !!!";   
 }   
 class SubClass1 extends SubClass{   
 String display1() {   
 value = "SubClass1 - Protected Value";   
 return value;   
 }   
 }   
 class SubClass2 extends SubClass1{   
 String display2() {   
 value = "SubClass2 - Protected Value";   
 return value;   
 }   
 }   


Step 4 : Open AndroidManifest.xml and add following code :

 <?xml version="1.0" encoding="utf-8"?>   
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"   
   package="com.gudivada.hemanthsomaraju"   
   android:versionCode="1"   
   android:versionName="1.0" >   
   <uses-sdk   
     android:minSdkVersion="8"   
     android:targetSdkVersion="18" />   
   <application   
     android:allowBackup="true"   
     android:icon="@drawable/ic_launcher"   
     android:label="@string/app_name"   
     android:theme="@style/AppTheme" >   
     <activity   
       android:name="com.gudivada.hemanthsomaraju.MainActivity"   
       android:label="@string/app_name" >   
       <intent-filter>   
         <action android:name="android.intent.action.MAIN" />   
         <category android:name="android.intent.category.LAUNCHER" />   
       </intent-filter>   
     </activity>   
   </application>   
 </manifest>   


Step 5 : Our output will be like this : 
  
  
ImageImage 
  
  

4.Private Access Specifier. 

Step 1 : Select File -> New -> Project -> Android Application Project (or) Android Project. Fill the forms and click "Finish" button. If you have any doubt regarding create a new project Click Here. 
  
Step 2 : Open res -> layout -> activity_main.xml (or) main.xml and add following code : 

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   
   xmlns:tools="http://schemas.android.com/tools"   
   android:layout_width="match_parent"   
   android:layout_height="match_parent" >   
   <Button   
     android:id="@+id/button1"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_alignParentTop="true"   
     android:layout_centerHorizontal="true"   
     android:layout_marginTop="50dp"   
     android:text="Get 1" />   
   <Button   
     android:id="@+id/button2"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_alignParentTop="true"   
     android:layout_centerHorizontal="true"   
     android:layout_marginTop="130dp"   
     android:text="Get 2" />   
   <TextView   
     android:id="@+id/textView1"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_centerHorizontal="true"   
     android:layout_centerVertical="true"   
     android:text="Hemanth Somaraju"   
     android:textAppearance="?android:attr/textAppearanceLarge" />   
 </RelativeLayout>   


Step 3 : Open src -> package -> MainActivity.java and add following code :package
 
 com.gudivada.hemanthsomaraju;   
 import android.os.Bundle;   
 import android.app.Activity;   
 import android.view.Menu;   
 import android.view.View;   
 import android.widget.Button;   
 import android.widget.Toast;   
 public class MainActivity extends Activity {   
 Button b1, b2;   
   @Override   
   public void onCreate(Bundle savedInstanceState) {   
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.activity_main);   
     b1 = (Button) findViewById(R.id.button1);   
     b2 = (Button) findViewById(R.id.button2);   
     b1.setOnClickListener(new View.OnClickListener() {   
 @Override   
 public void onClick(View v) {   
 // TODO Auto-generated method stub   
 display(111);   
 }   
 private void display(int val) {   
 // TODO Auto-generated method stub   
 Toast.makeText(getBaseContext(), ""+val, Toast.LENGTH_SHORT).show();   
 }   
 });   
     b2.setOnClickListener(new View.OnClickListener() {   
 @Override   
 public void onClick(View v) {   
 // TODO Auto-generated method stub   
 display(999);   
 }   
 private void display(int val) {   
 // TODO Auto-generated method stub   
 Toast.makeText(getBaseContext(), ""+val, Toast.LENGTH_SHORT).show();   
 }   
 });      
   }   
   @Override   
   public boolean onCreateOptionsMenu(Menu menu) {   
     getMenuInflater().inflate(R.menu.main, menu);   
     return true;   
   }   
 }   


Step 4 : Open AndroidManifest.xml and add following code : 

 <?xml version="1.0" encoding="utf-8"?>   
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"   
   package="com.gudivada.hemanthsomaraju"   
   android:versionCode="1"   
   android:versionName="1.0" >   
   <uses-sdk   
     android:minSdkVersion="8"   
     android:targetSdkVersion="18" />   
   <application   
     android:allowBackup="true"   
     android:icon="@drawable/ic_launcher"   
     android:label="@string/app_name"   
     android:theme="@style/AppTheme" >   
     <activity   
       android:name="com.gudivada.hemanthsomaraju.MainActivity"   
       android:label="@string/app_name" >   
       <intent-filter>   
         <action android:name="android.intent.action.MAIN" />   
         <category android:name="android.intent.category.LAUNCHER" />   
       </intent-filter>   
     </activity>   
   </application>   
 </manifest>   


Step 5 : Our output will be like this : 
  
ImageImage