IMO an Interface must be be preffered to abstract classes unless you wish to have functionality that an Interface does not provide. This would include having non-primitive attributes (you can only define primitive data members in an interface). Also all data members in an Interface are final and static, so that may be another consideration. Also since we cannot implement methods within Interfaces, we must use abstract (non-pure) where we wish to impplement a method in the base class which will be used by the sub-classes.
Since
Java does not support multiple inheritence it is always better to use Interfaces wherever possible so that we do not lock up a sub-class's ability to inherit from any other class.
Parag