Михаил: потому, что бэкап одно, а версионность другое. Если вам надо "50 файлов в разных местах диска с коментариями и возможностью просмотра изменений", то по-любому неудобно будет.
Сергей Протько: ну да. Если не будет реализации, будет вызываться default-реализация из интерфейса. Виртуального доступа не будет. Хотя, конечно, очень похоже. И переменные в интерфейсе объявлять нельзя, если не ошибаюсь.
Сергей Протько: разница видна и не только под капотом. Даже на поверхности видно, что интерфейс - это "просто" средство доказать, что данный класс отвечает этой сингатуре. Абстрактный класс - это класс с виртуальными функциями без реализации по-умолчанию. Т.е. абстрактная функция будет с виртуальным доступом, а функция из интерфейса - как обычная
Сергей Протько: ну, можно и так. Вообще, правильнее говорит "класс обещает обеспечить реализацию всех методов из неограничего количества интерфейсов". Прикол в том, что если мне не изменяет память, определить реализацию нужно всех методов в случае с интерфейсом, а в случае с абстрактым классом - необязательно.