Saturday, October 2, 2010

What is Abstraction in java - Java abstraction tutorial and example

What is abstraction ?
Abstraction in Java or Object oriented programming is a way to segregate implementation from interface and one of the five fundamentals along with Encapsulation, Inheritance, Polymorphism, Class and Object.  Abstraction in Java is achieved by  using interface and abstract class in Java. An interface or abstract class is something which is not concrete , something which is incomplete. In order to use interface or abstract class we need to extend and implement abstract method with concrete behavior. One example of Abstraction is creating interface to denote common behavior without specifying any details about how that behavior works e.g. You create an interface called Server which has start() and stop() method. This is called abstraction of Server because every server should have way to start and stop and details may differ. As I said earlier Abstraction in Java is implemented using abstract class and interface as discussed in next section. In fact What is abstraction in Java, Difference between Abstraction and Encapsulation  is also a very popular core Java interview because strong OOPS skill is one of the primary requirement for Java developers.



What is abstract class in Java
An abstract class is something which is incomplete and you can not create instance of abstract class. If you want to use it you need to make it complete or concrete by extending it. A class is called concrete if it does not contain any abstract method and implements all abstract method inherited from abstract class or interface it has implemented or extended. By the way Java has concept of abstract classes, abstract method but a variable can not be abstract in Java. Popular example of abstract class in Java is ActionListener which has abstract method called actionPerformed(ActionEvent ae). This method is called when an ActionEvent is fired like when you click on JButton. Its common in java to attach ActionListener with JButton by implementing abstract method actionPerformed(ActionEvent ae) using Anonymous class, as shown in below Example :

JButton  ok = new JButton("OK");
ok.addActionListener(new ActionListener(){
           public void  actionPerformed(ActionEvent ae){
               //code to handle event
           }
});


An abstract method in Java doesn't have body , its just a declaration. In order to use abstract method you need to override that method in SubClass.

so when do you use abstraction ? ( most important in my view )
when Yo  know something needs to be there but  not sure how exactly it should look like.

e.g. when I am creating a class called Vehicle, I know there should be methods like start() and Stop() but don't know start and stop mechanism of every vehicle since they could have different start and stop mechanism e..g some can be started by kick or some can be by pressing buttons .

the same concept apply to interface in Java  also , which we will discuss in some other post.

so implementation of those start() and stop() methods should be left to there concrete implementation e.g. Scooter , MotorBike , Car etc.

What is Abstraction in Java with ExampleIn Java Interface is an another way of providing abstraction, Interfaces are by default abstract and only contains public static, final constant or abstract methods. Its very common interview question is that where should we use abstract class and where should we use Java Interfaces in my view this is important to understand to design better Java application, you can go for java interface if you only know the name of methods your class should have e.g. for Server it should have start() and stop() method but we don't know how exactly these start and stop method will work. if you know some of the behavior while designing class and that would remain common across all subclasses add that into abstract class. Interface like Runnable are good example of abstraction in Java which is used to abstract task executed by multiple thread.

in Summary
1) Use abstraction if you know something needs to be in class but implementation of that varies.
2) In Java you can not create instance of abstract class , its compiler error.
3) abstract is a keyword in java.
4) a class automatically becomes abstract class when any of its method declared as abstract.
5) abstract method doesn't have method body.
6) variable can not be made abstract , its only behavior or methods which would be abstract.
7) If a class extends an abstract class or interface it has to provide implementation to all its abstract method to be a concrete class. alternatively this class can also be abstract.


Other Object oriented concept tutorials from Javarevisited blog

34 comments :

Noman Sadiq said...

also add about abstract class can be contain concrete method(method with full definition)

javarevisited said...

Thanks Noman, yes you are correct abstract class can contain concrete method.

Anonymous said...

what is difference between Abstraction and encapsulation , are they similar can we have abstraction along side encapsulation ?

Anonymous said...

what is abstraction in Java, is that same as interface in java, how different abstract class and interface are ?

casanova said...

abstraction is achieved wid da help f encapsulation,,,abstraction means hiding complexity,nd showing functionality,,whereas encap. means wraping or binding methods,objects wid classes,,so here da complexity(i.e.objects,methods) r bind 2gther to hide,,is done wid encapsu. nd showing juss dere functionality 2 da end user iz abstracton,,

casanova said...

dere iz a lil differnce btw. interfaces nd abstraction,a devloper shud uze a abstract class wen he wants 2 acheive 1-99%abstarction,,means wen u knw dat da need f user vl not vary in properties in future,,,whereas interface is used wen u`ve to achieve 100% abstraction ,,,,

Anonymous said...

Can u explain abstraction and encapsulation with simple example?

Javin @ polymorphism in java said...

definitely Anonymous, I will try to write example of abstraction as well as encapsulation in java soon.

siddu said...

i need exact difference between abstract and interface and exact where we use it ?

Anonymous said...

@siddu, major difference between abstract class and interface in Java is that, Interface is complete abstract while Abstract Class can contain non-abstract method.Also everything in interface by default public.In terms of using, interface is generally used to represent behavior e.g. Serializable, Runnable, Clonnable and in Java one Class can extend only one class but multiple interface so it make sense to use interface for behavior than using abstract class in Java.

Anonymous said...

Please explain what is abstract data type?

Rajiv said...

@Anonymous, There is nothing like abstract data type in my knowledge, though you have abstract class in Java which you may refer abstract data type. What is important is that you can not create instance of abstract class in Java, they are incomplete and require to be implemented by sub classes. Abstract classes can or can not contain abstract methods but if you have any abstract method that class automatically becomes abstract in Java.

Anonymous said...

first of all know the difference between abstract class and abstraction and then post anything. but dont tell abstraction used in abstract classes

Guru said...

Can u explain the difference b/w abstraction and polymorphism?

Ghezal Ahmad Zai said...

why every body explain so complicate, everyone has problem, Encapsulation means declaring attribute and methods inside a class, like
class A{
String name;
int number;
public void set(){
.
.
}
}
this is encapsulation.
thanks

shaik said...

That's right

Anonymous said...

Abstraction arises from a reorganization of similarities between certain objects, situations, or processes in the real world, and decision to concentrate upon these similarities and to ignore for the time being the differences.

Anonymous said...

Abstraction is hiding the complaxity and showing only the needed information to the outer world(ex. Abstract classes and Interfaces)

neha said...

abstraction means hiding all the unnecessary details from user. for ex. user dont need to know the inner working of engine and other parts while driving a car.

Jsudeep Kumar said...

Abstraction is a subjective term and encapsulation is objective, like both are the two different view of seeing the one thing. Abstraction says what a object can do, but encapsulation say how that object can do that.

Anonymous said...

Can we create abstract method in a non abstract class in Java? Why it's illegal to use abstract keyword with fields in Java, please explain.

parvesh khan said...

thanx for understanding the concept of abstraction and abatract keyword

Anonymous said...

can static method be abstract? why?

Anonymous said...

Abstraction is hiding complexity and showing functionality.

Anonymous said...

i want to know why we have constructor in abstract class? what are their uses?

Javin @ ClassLoader in Java said...

Hi @Anonymous, Constructor in abstract can used to initialize private fields declared on abstract class itself.

James said...

Abstraction is much more than abstract class and interface. Abstraction is key to design pluggable systems where you can easily replace parts with better ones. Abstraction is closely related to Specification and until your class meets a specification can plug it into System. For example MOUSE in your computer is not tied to any particular company and can be replaced by any company. Abstraction in Java or any Object oriented language is key to design loosely coupled applications.

Anonymous said...

How about level of Abstraction? level of abstraction is very important while declaring, classes, interface and methods. Interface should have higher level of abstraction than methods.

Anonymous said...

Abstraction: showing functionality hiding the implementation which is abtsract, abstraction is showing functionality irrelevent to its implementation in which whose implementation can change overtime with different type of instances but purpose is retained. doing this complexity of its implementation is hidden.

Anonymous said...

in Summary
from point number 4
"a class automatically becomes abstract class when any of its method declared as abstract"

This point is actually incorrect as you need to make class explicitly and compiler will give error if you don't do so

Rahul Askar said...

Really nice post(and comments as well) about Abstraction in Java. Would like to know when to use abstract class and when to use interface?

Javin @ abstract class interface interview questions said...

@Rahul, Thanks, That's great suggestion. I am writing about when to use abstract class and interface in Java, keep in touch or subscribe RSS feed to know about it.

Krishna.... said...

If you are defining a abstract method then you have to declare a class type abstract explicitly. otherwise it will give compiler error.

Jagamohan Sahoo said...

hey your blogs is what is abstraction but u r not mentioned meaning of abstractions

Post a Comment