When we need to create the common functionality and behavior of method. The behavior of the method are not changed. In this scenarios, we will use a abstract class.
We are working on order place here some functionality and behavior are same like create order id and place order details in database etc. here we will use abstract class.
When we need common functionality but behavior may change and we need to follow the functionality strictly then we have to use interface suppose.
Suppose we have to place acknowledge to suppliers about order and it's take as a file format some supplier taking format as csv, some xml etc. In this scenarios, we will use a Interface because functionality is same but behavior are changes but strictly we have to follow acknowledge for supplier.