Интерфейсы и абстрактные классы очень похожи, хотя абстрактные классы могут быть проще для понимания в реальном мире.
Что-то вроде «средства передвижения» будет абстрактным классом;что-то вроде "2010 Toyota Prius Hatchback" будет конкретным классом.Можно иметь или управлять, либо из вышеперечисленного.С другой стороны, нельзя было бы купить «транспортное средство» как таковое - можно было бы купить конкретный тип транспортного средства.В реальной жизни человек мог бы гипотетически попросить кого-нибудь купить ему транспортное средство, не указав какой-либо конкретный вид, но в большинстве языков программирования компилятор в такой ситуации хотел бы знать, какого рода.Для создания объекта нужно будет знать, какой тип объекта он создает, но во многих случаях коду будут предоставлены объекты, созданные другим кодом.Код, который использует абстрактный класс или интерфейс для указания того, что он ожидает от другого кода, будет использоваться с другим кодом, который создает любой класс, производный от этого абстрактного класса или реализующий этот интерфейс.