Основное отличие - то, что можно осуществить многократные интерфейсы в a
класс, но только расширяют единственный абстрактный класс.
Интерфейс используется, когда вы только хотите объявить, какие методы и участников класс ДОЛЖЕН иметь. Любой осуществляющий интерфейс должен будет объявить и осуществить методы, перечисленные интерфейсом.
Если вы также хотите иметь реализацию по умолчанию, используйте абстрактный класс. Любой класс, расширяющий абстрактный класс, должен будет осуществить только свои абстрактные методы и участников, и будет иметь некоторую реализацию по умолчанию других методов абстрактного класса, который можно отвергнуть или нет.