Чисто с точки зрения дизайна, и будучи независимым от языка, интерфейс - это контракт между вашим классом и клиентом, обещающий, что он делает, а не как он это делает. Это использование подразумевается в мантре «программа к интерфейсу».
Поскольку языки, такие как C ++, не имеют интерфейсов, абстрактный класс является единственным способом его представления. Для языков, в которых интерфейс является конструкцией первого класса, приемлем любой из этих способов, и в выборе есть компромиссы. Конечно, есть и другие технические различия в реализации между языками, но я не думаю, что вы спрашивали об этом.
Есть интервью с Эрихом Гаммой , в котором он обсуждает некоторые различия.
Чтобы ответить на ваш вопрос, я думаю, что это имеет смысл с теоретической точки зрения. С практической точки зрения, это, вероятно, зависит от того, на каком языке вы программируете:)