Введение в интерфейсы в C#
Интерфейс описывает, что объект должен уметь делать снаружи, не раскрывая, как устроен внутри. Это список обязанностей: «умеет рисоваться», «умеет сохраняться», «умеет сообщать площадь».
Абстрактный класс часто хранит общее состояние и готовый код для наследников. Интерфейс обычно не задает поля и не навязывает реализацию: он фиксирует только контракт, который класс обязан выполнить своими средствами.
Контракт помогает писать код, который зависит от умения, а не от имени конкретного класса. Один и тот же метод может принять любой объект, который умеет нужное действие, а реализацию можно подменить, не переписывая весь алгоритм.