Interfaces are essentially having all method prototypes no definition but Abstract class can contain method definations also.
In short Interface is a abstract class having all methods abstract.
Both abstract classes and interfaces are used when there is a difference in behaviour among the sub-types extending the abstract class or implementing the interface.
When the sub-types behaviour is totally different then you use an interface, when the sub-types behaviour is partially common and different with respect to the supertype an abstract class is used. In an abstract class the partially common behaviour is given a concrete implementation. Since there is no common behaviour between an interface and a sub-type an interface does not have an implementation for any of its behaviour.
If you create a abstract class writing the abstract keyword in the declaration part then You only can inherit the class. You can not create an instance of this abstract class but can inherit the class and with creating the instance of the derived class you can access the method of the abstract class.
If you use a virtual keyword in a method then you can override this method in the subclass if you wish..
If you create a abstract method then you must override this method in the subclass other wise it shows error in the program.

The concentration moved away from Interface towards Abstract Class. Better provide some examples… those would add extra values to the explanation.
Comment by shiman — May 28, 2008 @ 1:18 pm
interface also have signature or definition.
Comment by priya — September 22, 2008 @ 7:25 am
Short but hitting bulls eye…
Comment by Gourishankar — November 26, 2008 @ 3:47 pm
Good Post. Must read to get the Laymen Definition of the Interface and Abstract Class. A piece of code would make the post much much better.
Comment by Pritpal Singh — December 31, 2008 @ 5:01 am
Good for beginners and graduate students like me.
Comment by Mamta — March 9, 2009 @ 5:26 pm