From The Java™ Tutorials - Abstract Classes Compared to Interfaces
Which should you use, abstract classes or interfaces?
- Consider using abstract classes if any of these statements apply to your situation:
- You want to share code among several closely related classes.
- You expect that classes that extend your abstract class have many common methods or fields, or require access modifiers other than public (such as protected and private).
- You want to declare non-static or non-final fields. This enables you to define methods that can access and modify the state of the object to which they belong.
- Consider using interfaces if any of these statements apply to your situation:
- You expect that unrelated classes would implement your interface. For example, the interfaces
Comparable
andCloneable
are implemented by many unrelated classes.- You want to specify the behavior of a particular data type, but not concerned about who implements its behavior.
- You want to take advantage of multiple inheritance of type.
An example of an abstract class in the JDK is
AbstractMap
, which is part of the Collections Framework. Its subclasses (which includeHashMap
,TreeMap
, andConcurrentHashMap
) share many methods (includingget
,put
,isEmpty
,containsKey
, andcontainsValue
) thatAbstractMap
defines.