I'm just learning Java and design patterns and I am trying to get my head around when to use interfaces and abstract classes. I am wondering in the Strategy design pattern, why is it preferable to use an interface for the behaviour/algorithm subclasses rather than an abstract superclass?
Is it simply because there is no need for an abstract class because each behaviour/algorithm subclasses have their own implementation and therefore an abstract superclass would just provide extra functionality that won't be used?
Wouldn't an abstract class mean that there is an extra possibilty to use this extra functionality in the future if needed, for instance adding a method to the abstract superclass which is shared by the behaviour/algorithm subclasses if this is needed. Is there any reason why this is a bad idea?
Or is there another reason?