There are three differences:
- Interfaces can only declare public methods (i.e. no protected or package-private visible methods) and can not declare any fields
- Subclasses can only extend at most one abstract class, but can implement any number of interfaces
- The abstract class can also have implementations for some or all of the methods