Абстракция без наследования: подмена реализаций (тесты, моки), dependency inversion. Один тип может удовлетворять разным интерфейсам. Полиморфизм: функция принимает интерфейс и работает с любым типом с нужными методами. Меньшая связность кода.