The coding rule: if the class is abstract, you should start the class name with "Abstract".
Use case: For example you have a problem that you can solve with the state pattern (see wiki)
Then you have many states derived from one abstract State.
Example:
Let's say a wizard can transform himself into an animal.
The you have classes BirdState, CatState and SnakeState. You should derive them all from class AbstractState.
In Abstract state, you write an abstract method getName().
So every derived class is forced to implement it. So if you write a new DogState, you MUST write the getName() method there, else you cannot compile.
In AbstractState, you put the default behaviour, for example the method canFly() that returns false. Then you only override this method in all classes with anmals that can fly, in our case the BirdState.canFly() retuns true. The good thing is that if you add your DogState, then you don not need to write the canFly() method. So if someone calls dog.canFly(), it returns false automatically, as defined in the abstract state.