Абстрактные классы позволяют вам иметь камень основания для остальной части вашего кода. Вы можете создать частично реализованный класс, а затем разрешить пользователям создавать конкретные экземпляры, которые более специфичны для их требований. Общая функциональность остается в абстрактном классе. Реальная аналогия в мире - это магазин проката автомобилей. Они нанимают «автомобили». Понятие «автомобиль» является абстрактным классом и может иметь различные методы в их системе, которые позволяют нанимать и возвращать, а также такие свойства, как страховая группа, ежедневная ставка и т. Д. Однако no клиент будет заходить в прокат и нанимать автомобиль'. Они наняли Ford Focus, Mercedes, Skoda Fabia или что-то еще. Таким образом, это конкретные примеры абстрактного класса и вполне могут быть представлены в объектно-ориентированной системе с конкретными классами, полученными из «автомобиля».
Интерфейсы, с другой стороны, позволяют полиморфизм. Это когда объект одного класса ведет себя как один из другого. Я человек, который водит машину. Я не являюсь объектом «драйвер» (поскольку я делаю много других вещей), но меня вполне можно расценивать как наличие «драйвера» интерфейса, который позволит получить доступ к моим данным водительских прав и тому подобное.
Возможный дубликат [В чем разница между интерфейсом и абстрактным классом?] (Http://stackoverflow.com/questions/1913098/what-is-the-difference-between-an-interface-and-abstract- класс) – Sarfraz
@Sarfraz: Я хочу сценарий реального времени, где он может быть использован. –