Here are some hints for difference between abstract classes and interfaces
1. Use Interface if something will change frequently in design
2. If the methods can be determined and implemented, use abstract
classes to encapsulate them as methods of base classes and therefore
can be inherited by subclasses.
3. If you just want to declare some methods in your design which allows
to be devoloped from scratch later into different classes, the
interface is best choice.
4. if need provide more common data structure, use abstract classes as base class.
5. if want to add your code to other existing third party class for later potential requirement, interface is good to choose.
6. Interfaces are often used to describe certain functionality of
classes, thus one class can get multi-funcationlity from multiple
interfaces (multiple inheritance), while an abstract class, try to
describe a class's general attributes and functionalities which can be
reused or re-implemented by its subclasses.
7. in other word, Abstract class want to say is-a proposition, while Interface want to say -able or can-do proposition.
reference:
http://mindprod.com/jgloss/interfacevsabstract.html
http://www.javaworld.com/javaworld/javaqa/2001-04/03-qa-0420-abstract.html