An abstract class is like a general description of a group of objects but this object itself cannot be made into a real meaningful object.
For example a class for Shape it too abstract and not well defined to make into an object, but all shapes will have variables and actions that are similar.
class Shape
{
int nSides;
bool isRegular;
double GetArea();
double GetPerimeter();
}
Instead of putting void Draw() in class Shape, it could be defined in an interfaces IDrawable.
Then it could be an action used for any kind of graphical object.
interface IDrawable
{
void Draw();
}
So then a concrete class like Square would be a Shape that is Drawable.