We've used the Strategy pattern, which clearly indicates a place in the design that will change. Thus, you should define the strategy as an interface. Java doesn't allow multiple inheritance, so you can't extend something that gives you a useful implementation or more type identity. If you need to change your design, make it an interface. However, you may have abstract classes that provide some default behavior.
Abstract classes are excellent candidates inside of application frameworks.
For example, if you have an application framework, an abstract class may provide default services such as event and message handling. Those services allow your application to plug in to your application framework. However, there is some application-specific functionality that only your application can perform. Such functionality might include startup and shutdown tasks, which are often application-dependent. So instead of trying to define that behavior itself, the abstract base class can declare abstract shutdown and startup methods.