Вызов через интерфейс немного дороже, чем другие формы виртуального вызова метода из-за дополнительного уровня косвенности в vtable. В большинстве случаев это не должно иметь значения, поэтому вам не нужно слишком беспокоиться о производительности и придерживаться хорошего дизайна.
Сказав это недавно, я провел рефакторинг нескольких классов, представив интерфейсы и выполняя все вызовы через интерфейс. Я был настолько уверен (или ленив), что это не повлияло бы на то, что мы выпустили его без проверки производительности. Оказалось, что это оказало 10% -ное влияние на производительность всего приложения (не только вызовов). Мы внесли ряд изменений, и это было последнее, о чем мы подозревали. В конце концов, когда мы вернулись к конкретным классам, первоначальная производительность была восстановлена.
Это сильно оптимизированное приложение, и выше может не применяться в других случаях.