<p>There are quite a big difference between an <em>interface </em>and an <em>abstract class</em>, even though both look similar.</p>
<ul>
<li>Interface definition begins with a keyword interface so it is of type interface </li>
<li>Abstract classes are declared with the abstract keyword so it is of type class </li>
<li>Interface has no implementation, but they have to be implemented. </li>
<li>Abstract class&rsquo;s methods can have implementations and they have to be extended. </li>
<li>Interfaces can only have method declaration (implicitly public and abstract) and fields (implicitly public static) </li>
<li>Abstract class&rsquo;s methods can&rsquo;t have implementation only when declared abstract. </li>
<li>Interface can inherit more than one interfaces </li>
<li>Abstract class can implement more than one interfaces, but can inherit only one class </li>
<li>Abstract class must override all abstract method and may override virtual methods </li>
<li>Interface can be used when the implementation is changing </li>
<li>Abstract class can be used to provide some default behavior for a base class. </li>
<li>Interface makes implementation interchangeable </li>
<li>Interface increase security by hiding the implementation </li>
<li>Abstract class can be used when implementing framework </li>
<li>Abstract classes are an excellent way to create planned inheritance  hierarchies and also to use as non-leaf classes in class hierarchies. </li>
</ul>
<p>Abstract classes let you define some behaviors; they force your  subclasses to provide others. For example, if you have an application  framework, an abstract class can be used to provide the default  implementation of the services and all mandatory modules such as event  logging and message handling etc. This approach allows the developers to  develop the application within the guided help provided by the  framework.</p>
<p>However, in practice when you come across with some  application-specific functionality that only your application can  perform, such as startup and shutdown tasks etc. The abstract base class  can declare virtual shutdown and startup methods. The base class knows  that it needs those methods, but an abstract class lets your class admit  that it doesn\'t know how to perform those actions; it only knows that  it must initiate the actions. When it is time to start up, the abstract  class can call the startup method. When the base class calls this  method, it can execute the method defined by the child class.</p>