Наследование и полиморфизм две тесно связанные концепции для работы с абстракциями. Наследование определяет отношение "является" между абстракциями с разной степенью детализации, а полиморфизм определяет способы оперирования абстракциями. В программировании обычно выделяют три формы полиморфизма, которые различаются тем, что абстрагируется. Абстракция объектов через наследование. Все автомобили едут, все самолеты летают, а любой документ можно напечатать. В этом примере автомобиль, самолет или документ -- абстракция, определяющая общее поведение для реальных объектов. В программе мы для абстракций создаем классы, либо реализующие общее поведение, либо позволяющие это сделать наследным классам. Имея такой абстрактный класс мы можем использовать его поведение, не уточняя класс наследника -- ехать может и легковой и грузовой автомобили. Это работает и в другую сторону. Поведение базового класса доступно наследнику: грузовик может ехать, поскольку он автомобиль. В приведенном примере легко