Хорошее правило: если нужна категория поведения или свойств, общая для объектов, но неудобная для наследования, используйте интерфейс. Если наследование имеет смысл, но вам не нужен конкретный класс-предок, используйте абстрактный класс. (А если вы хотите создавать экземпляр класса-предка, то лучше использовать обычный класс.)