Интерфейс объявляет контракт — набор методов, которые тип должен предоставить — без реализации (или с минимальной). Абстрактный класс — это частично реализованный класс, который может содержать общее состояние и конкретные методы, но не может быть инстанцирован. Ключевое различие: класс может реализовать много интерфейсов, но наследоваться только от одного класса.
