Зачем использовать интерфейс и абстракцию над просто абстракцией? - PullRequest
4 голосов
/ 25 марта 2020

Я читаю некоторый код в Интернете, где кто-то реализовал следующие классы: IMapObj, который является нормальным интерфейсом, AbstractMapObj, который является производным от этого интерфейса, и множество объектов карты, которые происходят от AbstrsctMapObj.

Во всем своем коде он ссылается на IMapObj, а не AbstractMapObj.

В чем преимущество использования интерфейса и абстрактного класса вместо просто абстрактного класса? Нет необходимости говорить, что никакой другой класс не является производным от IMapObj, только AbstractMapObj.

Ответы [ 2 ]

4 голосов
/ 25 марта 2020

Существует только 1 причина для использования обоих, и это то, что абстрактный класс может обеспечить реализацию по умолчанию некоторых или всех функциональных возможностей. Интерфейс может быть легко смоделирован для тестирования.

3 голосов
/ 25 марта 2020

В чем преимущество использования интерфейса и абстрактного класса вместо просто абстрактного класса?

В опубликованном примере, похоже, нет реальной причины использовать абстрактный класс , В другом сценарии ios абстрактный класс может предоставить общую базу для подмножества реализаций интерфейса. С интерфейсом, обеспечивающим более стабильную / общую абстракцию для остальной части приложения / библиотеки.


Обычно I будет использовать только абстрактный класс для совместного использования общей реализации, а не как определение интерфейса - но это только мои предпочтения. Есть много разных стилей и моделей, которые люди используют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...