Выберите между абстрактным классом и интерфейсом
Среди функциональных возможностей двух моих процессов есть общая функция для объединения файлов. Мне не нужно настаивать на том, чтобы у какого-либо процесса были какие-то методы, как у интерфейса. И, кроме того, эти два процесса являются независимыми. Итак, это нормально, я просто иду с абстрактным классом и имею реализацию в самом абстрактном классе? Также мне не нужен какой-то абстрактный метод.
1 ответ
Наследование используется, когда есть IS-A
связь между подклассом и базовым классом. Я не думаю, что это так. Вы не указали язык, но из вашего профиля, я думаю, вы используете Java. Поэтому, если вы используете абстрактный класс, вы не сможете наследовать от другого, более подходящего класса в будущем.
Вместо наследования вы можете использовать композицию. Это означает, что вы создаете обычный класс слияния файлов, который имеет этот метод для слияния файлов. А в классах, где вы хотите иметь эту функциональность, вы просто создаете экземпляр этого нового класса слияния файлов. Это позволяет вам наследовать от другого класса в будущем.
Если вы хотите сообщить миру, что эти классы могут объединять файлы (чтобы использовать полиморфизм), и вы используете Java 8, вы можете создать default
метод внутри интерфейса и реализовать этот интерфейс без переопределения этого метода по умолчанию. Но я думаю, что состав будет лучше в этом случае.