Abstract classes should be used primarily for objects that are closely related, whereas interfaces are best suited for providing a common functionality to unrelated classes . Interfaces are a good choice when we think that the API will not change for a while.