If you know partial requirements like I have a Circle and Circle is abstracted from Shape, then you should go with abstract class. But if you dont know anything about the requirements implementation and its dependency then you should use interface in that case.