"Это другое, понимать надо" (c) Дружественные функции никак не получается сравнить с абстрактными классами.
...Например, реализуем паттерн "Стратегия" или "Посетитель".
Эти паттерны используют интерфейс (абстрактный класс) и при этом внешний
модуль (реализация интерфейса) должен иметь доступ к внутренним данным
другого класса. Тут не много вариантов - или все данные открыты.
Это аналогия квартиры без стен и дверей.
Или дружественный класс.
Интерфейс и дружественный класс - разные инструменты, нужны для разного.
Просто случайно встретились у Посетителя и Стратегии. И везде, где потребуется.