Abstract classes are used in scenarios, when there is a need of Multi level inheritances of classes, and they should also implement a Interface. Eg: suppose you have a interface named InterfaceTest with 4 properties and class A has implemented this interface. Now the situation arises that i have to inherit a Class B from Class A. Now when Class B tries to inherit from Class A, Class B will be forced to implement the interface properties which are already implemented by the Class A. So this will continue
unless you , place a Abstract Class between Interface and Class A. In this scenario the abstract class will implement the interface , and the class A will inherit from the abstract class.But now the difference, is the Class A , need not implement any of the interface properties.