Интерфейс или абстрактный класс?
У меня такой вопрос. Часто задают вопрос, а что лучше использовать абстрактный класс или интерфейс? А я хочу и то и другое сразу. У меня есть сущность, которая является абстрактной и имеет 2 метода, которые будут реализованы в наследниках, но которые имеют базовую реализацию и переменные нестатические, которые будут задействованы в этих методах. А также у меня есть интерфейс с теми же самыми методами. Я хочу взять этот абстрактный класс и реализовать в нем интерфейс с теми же самыми методами. Чтоб потом в системе обращаться к таким сущностям через интерфейс, а не абстрактный класс. Так можно делать? Какие проблемы меня могут ждать в будущем или это идеальное решение? Если сказать о задаче в целом, то у меня будут события от разных источников и разные обработчики для каждого источника. Вот для базового обработчика и используется абстрактный класс, который реализует интерфейс. А потом уже будут реальные обработчики для каждого типа события. Подскажите, пожалуйста, как лучше это реализовать? Задача вроде типовая.
Ответы (1 шт):
Обращение к сущностям через интерфейс - идеальное решение.
Проблемы могут возникнуть, если не использовать интерфейс.
Пользователям интерфейса должны быть неинтересными детали реализации: сколько есть классов, реализующих данный интерфейс, и как они между собой связаны.
Если же в программе упоминается конкретный класс, реализующий интерфейс, то впоследствии возникнут проблемы при необходимости что-то сделать с этим классом.