Interface
Unrelated Classes
You expect unrelated classes would implement your interface. For example, Comparable and Clonable are implemented by many unrelated classes.
Specifying Behaviour
You want to specify the behaviour of a particular data type, but not concerned about who implements this behaviour. For example, Clonable and Comparable.
Multiple Inheritance
You want to take advantage of multiple inheritance.
References
- Stack Overflow
If we are designing small, concise bits of functionality, use interfaces. If we are designing large functional units, use an abstract class.