Arpit Mandliya

About Arpit Mandliya

I am java developer at Tata Consultancy Services Ltd. My current area of interest are J2EE,web development and java design patterns. I am technology enthusiast trying to explore new technologies. In spare time,I love blogging.

Difference between Abstract Class and Interface in java

Some of the popular interview questions are “What are the differences between abstract class and interface”, “When will you use abstract class and when will you use interface”. So in this article, we will go through this topic.

Before going through differences between them, let’s go through their introduction.

Abstract class

Abstract classes are created to capture common characteristics of subclasses. It can not be instantiated, it can be only used as super class by its subclasses. Abstract classes are used to create template  for its sub classes down the hierarchy.

Lets take example of JDK class GenericServlet:

public abstract class GenericServlet implements  Servlet, ServletConfig,Serializable{    
// abstract method     
    abstract  void     service(ServletRequest req, ServletResponse res) ; 
    void init()     {
         // Its implementation        
     }  
       // other method related to Servlet    
}

When HttpServlet extends Generic servlet, it provides implementation of service() method:

public class HttpServlet extends GenericServlet
{
       void  service(ServletRequest req, ServletResponse res)
       {
       // implementation 
}
     protected  void  doGet(HttpServletRequest req, HttpServletResponse resp) 
{
    // Implementation 
}

   protected  void  doPost(HttpServletRequest req, HttpServletResponse resp) 
{
    // Implementation 
}

// some other methods related to HttpServlet
}

Interface

An interface is a collection of abstract methods. A class implements an interface, thereby inheriting the abstract methods of the interface. So it is kind of signing a contract, you agree that if you implement this interface, then you have to use its methods. It is just a pattern, it can not do anything itself.

Lets take example of Externalizable Interface:

public interface Externalizable
extends Serializable
{

    void writeExternal(ObjectOutput out)
            throws IOException;
    void readExternal(ObjectInput in)
            throws IOException,
            ClassNotFoundException;
}

When you implement this interface, you have to implement the above two methods:

public class Employee implements Externalizable{ 

 int employeeId;
 String employeeName;


 @Override
 public void readExternal(ObjectInput in) throws IOException,
 ClassNotFoundException {  employeeId=in.readInt();
  employeeName=(String) in.readObject();
  
 } @Override
 public void writeExternal(ObjectOutput out) throws IOException {

  out.writeInt(employeeId);
  out.writeObject(employeeName); }
}

Abstract class vs Interface

ParameterAbstract classInterface
Default method ImplementationIt can have default method implementationInterfaces are pure abstraction.It can not have implementation at all.
ImplementationSubclasses use extends keyword to extend an abstract class and they need to provide implementation of all the declared methods in the abstract class unless the subclass is also an abstract classsubclasses use implements keyword to implement interfaces and should provide implementation for all the methods declared in the interface

Constructor
Abstract class can have constructorInterface  can not have constructor
Different from normal java classAbstract classes are almost same as java classes except you can not instantiate it.Interfaces are altogether different type
Access ModifierAbstract class methods can have public ,protected,private and default modifierInterface methods are by default public. you can not use any other access modifier with it
Main() methodAbstract classes can have main method so we can run itInterface do not have main method so we can not run it.
Multiple inheritanceAbstract class can extends one other class and can implement one or more interface.Interface can extends to one or more interfaces only
SpeedIt is faster than interfaceInterface is somewhat slower as it takes some time to find implemented method in class
Adding new methodIf you add new method to abstract class, you can provide default implementation of it. So you don’t need to change your current codeIf you add new method to interface, you have to change the classes which are implementing that interface

 

When to use Abstract class and interface:

  • If you have a lot of methods and want default implementation for some of them, then go with abstract class
  • If you want to implement multiple inheritance then you have to use interface. As java does not support multiple inheritance, subclass can not extend more than one class but you can implement multiple interface so you can use interface for that.
  • If your base contract keeps on changing, then you should use abstract class, as if you keep changing your base contract and use interface, then you have to change all the classes which implements that interface.

Introduction of default and static methods in java 8

Oracle has tried to bridge gap between abstract class and interface by introducing concept of default and static methods in interface. So now we can provide default implementation of a method in interface and will not enforce class to implement it. I will cover this topic in my next post.

Do you want to know how to develop your skillset to become a Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you two of our best selling eBooks for FREE!

JPA Mini Book

Learn how to leverage the power of JPA in order to create robust and flexible Java applications. With this Mini Book, you will get introduced to JPA and smoothly transition to more advanced concepts.

JVM Troubleshooting Guide

The Java virtual machine is really the foundation of any Java EE platform. Learn how to master it with this advanced guide!

Given email address is already subscribed, thank you!
Oops. Something went wrong. Please try again later.
Please provide a valid email address.
Thank you, your sign-up request was successful! Please check your e-mail inbox.
Please complete the CAPTCHA.
Please fill in the required fields.

5 Responses to "Difference between Abstract Class and Interface in java"

  1. vi says:

    This comparison was valid till Java SE 7. Now with Java SE 8 released, interfaces can contain methods.

    I would normally use an abstract class, if the class has any functions with code. I would convert an abstract class to interface, if the abstract class has no functions with code.
    Adding functions with code seems to make sense mostly for existing interfaces in legacy system. While writing a new feature, I would hesitate to add functions with code in an interface.

  2. Muralidhar says:

    i saw the same post in his blog without any change of line. I think he copied form his blog and posted here. Anyways nice explanation. Thanks.

  3. vn says:

    Adding a function code in an interface makes sense ONLY when this function is dependent just on the other functions in the same interface.

  4. Stephane says:

    Hi,

    It is difficult to get the meaning of this sentence:

    If your base contract keeps on changing, then you should use abstract class, as if you keep changing your base contract and use interface, then you have to change all the classes which implements that interface.

    Can’t we rephrase it as:

    If your base contract keeps on changing then you should use an abstract class. Because if your base contract keeps on changing and you still use an interface, you would have to change all the classes which implements that interface every time the contract changes.

    Kind Regards,

    Stephane

  5. rocky says:

    good post, thanks.

Leave a Reply


8 − = one



Java Code Geeks and all content copyright © 2010-2014, Exelixis Media Ltd | Terms of Use | Privacy Policy | Contact
All trademarks and registered trademarks appearing on Java Code Geeks are the property of their respective owners.
Java is a trademark or registered trademark of Oracle Corporation in the United States and other countries.
Java Code Geeks is not connected to Oracle Corporation and is not sponsored by Oracle Corporation.
Do you want to know how to develop your skillset and become a ...
Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you two of our best selling eBooks for FREE!

Get ready to Rock!
You can download the complementary eBooks using the links below:
Close