When to User Interface and When Abstract Class

This discussion is very common , when to use interface and when to use Abstract Class. Before deciding we should know properties of Abstract Class and Interface in details

::Abstract Class::

  • It contains both abstract methods and non abstract methods
  • Classes Extend Abstract Class
  • Abstract Classes cannot be instantiated.
  • Abstract can't be declared with Final Synchronised Native.
  • It can have static and instance initialise block.
  • Abstract Class has constructor.
  • Abstract Class may not contain any method(any abstract method)



::Interfaces::
  • Interface contains all abstract methods.
  • Classes implements Interface.
  • all methods compulsory implemented by particular class which implement interface.
  • Interface variables are implicitly public static and final.
  • Interface variables are constants that cannot be overridden. They are inherited by any class that implements an interface.
  • Interface may not contain any method(Marker Interface).
  • Interface does not contain Constructor.
  • Interface cant have static or instance initialise block.


Abstract class without any abstract method is possible. It is very confusing why would we need an Abstract class without abstract method. Just think about the following example,

Lets define an interface called Car, with some attributes like


public interface Car{
  public static int numberOfWheels = 4;
  public int getNumberofDoors();  public int getnumberOfEngine();
  public int getnumberOfSeats();
}









We can define SportsCar as a abstract class with some default  properties like,



public abstract class SportsCar implements Car{
   public int getnumberOfEngine(){ return 2;}

   public int getnumberOfSeats(){ return 1;}
}








Here SportsCar is a abstract class without any method, it is just implementing some default properties like number of engine , number of seats etc.

And rest of the properties are left to be defined by classes that will extend class SportsCar.



One of the point is that,If you need to change your design, make it an interface. However, you may have abstract classes that provide some default behavior. Abstract classes are excellent candidates inside of application frameworks.



Interfaces are used for defining constants

Comments

Popular posts from this blog

Converting Java Map to String

Difference between volatile and synchronized

Invoking EJB deployed on a remote machine