When there is some part of the implementation (let's call it A) which you want to be provided by the sub classes (in future as per requirements) and also there is some comman part of the implementation shared by all sub classes (let's call it B). Now part A is not known as how to be implemented as it will depend on future requirements hence it's best to have it as abstract. By having abstract methods all the sub classes are forced to provide the implementation.
Abstract class can contain all the common states and methods and can abstract the methods which will have different implementation as per the sub class implementation. The common methods also can be override if needed.
Also you can refer template design pattern, it's intent and implementation as it is a very good example of usuage of abstract class.