Here's a short answer
1) Go for an abstract class when the sub classes will share behavior, so the concrete implementation of these shared behaviors would be placed in the abstract class. if the sub types won't share behavior go for an interface.
2) You can implement behaviors/features in an abstract class which you can't with an interface. However it's only an advantage if the sub classes share these behaviors/features.
I suggest you read this book
Object-Oriented Software Construction[
^] if want very good insight into software design.