I am going to answer your question in the point of view of "Why do we use abstract class".
Abstract class has the following features in compare to a non-abstract class("
normal class" is what you are saying or
Interface).
An abstract class can have both abstract method and non-abstract method, Eg -
abstract class ExampleClass
{
public int Add(int Num1, int Num2)
{
return Num1 + Num2;
}
public abstract int Subtract(int Num1, int Num2);
}
The functionality of the Abstract classes can be extended further without changing it's child classes.
Consider that you have an Interface in your project called IExample. Now, if you are making any changes to this Interface, all its child classes will have an effect.
Abstract classes are very useful when you required your base class to provide the default implementation of certain methods whereas other methods are overridden by child classes. Using interface has more restriction, whereas Abstract class provides mixture of ways to do things.
Finally, the full feature of the Abstract class can only be understood only by implementing this in a project design and experimenting, rather than trying to understand theoretically.