when to use abstract class or interface is the interesting questions long time back I was worried about. I think it's depend on your requirement and but also there is a trade-off.
most people tend to design their application with use of interfaces.yes it's true it gives more flexibility to the system but you might be experiencing consequences without selecting a right guy for right job.
Technically, you are free to use whether abstract class or interface.I would approach this question form the scratch.By definition abstract class is a class which can't be instantiated.Indeed it does contains abstract ,non-abstract methods,instance variables.when It comes to interface, it does only have method declarations nothing concrete with in it.in general terms it specifies the contract to the outside world what you can do if you implement the interface.
According to my knowledge, these are the situations where you worry when you use interface or abstract class.
1.) Let say for a example, you come across a situation where you have to share common behavior among class.if so, abstract class is the right guy for the job.Interfaces does't cater for this need.(e.g. Think about the Fish abstract class and breathe method,most of the fish breathe in a same way so can share common behavior among others).I mean in a nutshell, abstract class helps you to structure the classes and helps define common behavior among others.
2.)Interface cater for multiple interface inheritance,more over you are not restricted with class hierarchies, you can just plug the interface when you need it.For a instance, consider the bounceable interface which has the bounce() method.There might be classes like Ball,Ballon which has bouncing capability but they are in distinct class hierarchies. Who is the guy comes to help you out.It is a interface.Finally use interface when you need to give responsibilities to distinct classes which doesn't share common structure.
This is the good reference if you need to distinguish difference between Abstract class & Interface.
Interfaces vs Abstract class
Regards,
Nuwan Arambage