Это еще не вопрос о различии между абстрактными классами и интерфейсами, поэтому, пожалуйста, подумайте дважды, прежде чем голосовать, чтобы закрыть его.
Я знаю, что интерфейсы необходимы для тех языков ООП, которые не поддерживают множественное наследование - например, С# и Java. Но как насчет тех, кто имеет множественное наследование? Будет ли концепция интерфейса (как специфической языковой функции) избыточной на языке с множественным наследованием? Я думаю, что ООП "контракт" между классами может быть установлен с использованием абстрактных классов.
Или, если это более явно, являются ли интерфейсы на С# и Java просто следствием того, что они не поддерживают множественное наследование?