If the functionality we are creating will be useful across a wide range of disparate objects, use an interface . 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.