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