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.