1. An Abstract Class can contain default Implementation, where as an Interface should not contain any implementation at all. An Interface should contain only definitions but no implementation. where as an abstract class can contain abstract and non-abstract methods.
2. The difference is that a class cannot extend an abstract class if it already is extending some other class. An interface on the other hand can be implemented in any situation which makes them very powerful.