Ответ 1
Объявление 1: дополнительный абстрактный базовый класс позволяет вам развивать интерфейс без нарушения реализации. Предполагалось, что не было абстрактного базового класса, и вы бы расширили интерфейс, допустим, добавив новый метод. Тогда ваша реализация была нарушена, потому что ваш класс больше не реализует интерфейс.
Используя дополнительный абстрактный базовый класс, вы можете отделить это: если вы добавите новый метод в интерфейс, вы можете предоставить виртуальную реализацию в базовом классе, и все ваши подклассы могут оставаться неизменными и могут быть приняты в совместим новый интерфейс в более поздний момент времени.
Кроме того, эта комбинация позволяет вам определить контракт (используя интерфейс) и предоставить некоторые механизмы по умолчанию (используя абстрактный базовый класс). Любой, кто штрафует значения по умолчанию, может наследовать от абстрактного базового класса. Любой, кто хочет супер-пупер тонкого контроля над любой небольшой деталью, может реализовать интерфейс вручную.
Объявление 2: С технической точки зрения НЕОБХОДИМО реализовать интерфейс в конечном классе. Но это, опять же, позволяет вам развить вещи отдельно друг от друга. A CarService
- это точно Service<Car>
, но, возможно, это еще больше. Возможно, только для CarService
нужны дополнительные материалы, которые не должны входить в общий интерфейс или в базовый класс службы.
Я думаю, почему: -)