Объясните значение понятия "интерфейсы" в ООП? Что это такое, отличия от классов, зачем нужны, и где используются.
Если не вдаваться в академические определения, а говорить с точки зрения практики, то вот самый простой пример, который ты можешь во многих языках уже реализованным встретить.
Представь, что у тебя есть огромное множество различных классов- реализаций коллекций объектов. Списки, Массивы, Словари, классы для обращения к БД и так далее и тому подобное. Все эти классы не имеют какого-то общего предка, кроме object.
Стоит задача - сделать так, чтобы работа с этими коллекциями с точки зрения прикладного программиста выглядела одинаково. То есть, чтобы у любой коллекции был стандартные методы, чтобы узнать её длину, получить элемент, перейти к следующему элементу. Так как общего предка нет, нельзя реализовать все эти методы в абстрактном классе и от него наследовать.
Решение: мы создаём интерфейс IEnumerable с указанными выше методами и реализуем его в каждой коллекции. Всё. Теперь программист может любой массив привести к типу IEnumerable и работать с ним, вообще не задумываясь, как он на самом деле устроен внутри.
Таким образом интерфейсы заменяют множественное наследование, когда классам из совершенно разных мест в иерархии надо иметь сходные методы работы и (что важно) чтобы другие знали о том, что эти методы у них есть
интерфейс - то что видишь на экране в уже готовой программе, с помощью интерфейса происходит твое общение с компом, класс - грубо говоря часть программы которая скрыта от пользователя в готовой программе. С использованием классов как раз и создается видимая часть интерфейса. Класс - кусок исходного текста программы. Интерфейс - результат работы класса.
http://ru.wikipedia.org/wiki/Интерфейс_(объектно-ориентированное_программирование)