Абстрактные классы описаны как полезные для семейства объектов (например, могут использоваться для животных, которые являются млекопитающими). Однако, какая разница между использованием интерфейса или абстрактного класса для представления семейства связанных объектов?
Мой процесс заключается в использовании абстрактного класса, когда я хочу определить общую функциональность, но с опцией для будущих расширений и интерфейсом для пользовательской функциональности (реализации).
Например, я написал абстрактный класс для инкапсуляции некоторых функций базы данных, которые будут активно использоваться в небольшом веб-приложении на работе. Я написал абстрактный класс с виртуальными методами, которые в будущем могут быть заменены пользовательскими функциями (например, ведение журнала или некоторые отчеты о событиях в базе данных, которые могут потребоваться).
Это правильный путь? Имеет ли какое-либо значение выбор одной конструкции (абстрактной или интерфейсной) для представления семейства?