Вы можете, вопрос в моем уме больше, если вы.С самого начала скажу, что нет жесткого и быстрого ответа.Сделайте правильную вещь для вашей текущей ситуации.
Для меня наследование подразумевает отношения «есть».Представьте себе класс собаки, который может быть расширен более специализированными подтипами (эльзасский, пудель и т. Д.).В этом случае может быть правильным сделать абстракцию класса собаки, поскольку подтипы - это собаки.Теперь давайте представим, что собакам нужен ошейник.В этом случае наследование не имеет смысла: бессмысленно иметь отношения «есть-а» между собаками и ошейниками.Это определенно отношения «есть», ошейник - это объект сотрудничества.Делать ошейник абстрактным только для того, чтобы у собак был один, не имеет смысла.
Я часто нахожу, что абстрактные классы без абстрактных методов действительно выражают отношение «есть».В этих случаях я обычно нахожу, что код можно лучше разложить без использования наследования.Я также обнаружил, что абстрактные классы без абстрактного метода часто являются запахом кода и, по крайней мере, должны приводить к возникновению вопросов при рассмотрении кода.
Опять же, это совершенно субъективно.Вполне могут быть ситуации, когда абстрактный класс без абстрактных методов имеет смысл, он полностью зависит от интерпретации и обоснования.Примите лучшее решение для всего, над чем вы работаете.