Цель абстрактного класса - служить частью иерархии классов, где более производные классы имеют общую реализацию.
Если у вас есть симулятор полета, вы можете определить абстрактный класс ThingsThatFly
, который реализует некоторые свойства (скорость полета, высоту, курс) и методы (TakeOff (), Land ()), которые объединяют все летающие объекты, но будет объявлено abstract , потому что ThingsThatFly - это абстракция всех конкретных летающих вещей. Конечно, у вас могут быть и промежуточные классы, например, Cessna172
может наследоваться от Airplane
, который наследуется от ThingsThatFly
. Вы бы сделали это, если бы все самолеты имели общую реализацию, например, птицы не имеют (например, свойство оставшегося топлива).
Тогда у вас будет несколько конкретных (= реальных) вещей, которые летают как Cessna 172, космический челнок и утка. Каждый из них будет конкретным классом, производным от ThingsThatFly
Это отличается от того, что конкретные классы реализуют интерфейс, такой как IThingsThatFly
, в том, что абстрактный класс обеспечивает не только определение ожидаемых свойств и методов, но также обеспечивает (надеюсь полезную) реализацию этих свойств. и методы.