Классы обладают достаточно большим количеством преимуществ. Наследственность — одно из них. В некоторых книгах данное свойство классов начинают описывать только к середине книги, но это большая ошибка.
Наследственность — основа ООП. Даже в самой простой программе мы встречаемся с наследственностью, поэтому просто необходимо разобраться с этим уже сейчас.
Одно из величайших достижений в ООП — наследование. Рассмотрим пример. Вы написали объект— "гараж". Теперь вам нужно написать объект "дом". Гараж— это, грубо говоря, однокомнатный дом. Оба эти здания обладают одинаковыми свойствами — стены, пол, потолок и т. д. Поэтому желательно взять за основу гараж и доделать его до дома. Для этого вы создаете новый объект "Дом" и пишете, что он происходит от "Гаража".
Ваш новый объект сразу примет все свойства гаража. Это значит, что уже есть стены, пол и потолок, и остается добавить только окна и интерьер. Теперь у вас будет уже два объекта: гараж и дом.
Используя данный прием, можно, например, создать еще будку для собаки. Для этого снова создается объект "Будка", который происходит от "Гаража" (можете произвести построение от "Дома", чтобы в будке у собаки был интерьер, но это мне кажется лишним, собака этого просто не оценит).
Нужно только уменьшить размер гаража, изменить вход, и он превратится в будку. В итоге получается древовидная иерархия наследования свойств объектов, которая показана на рис.
Тут еще нужно запомнить два понятия: предок и потомок.
Предок— класс, от которого происходят другие классы. Потомок— класс, который происходит или порожден из другого. Например, гараж — это предок для дома, будки и дачи. Дом, будка и дача— потомки от гаража. Один объект может быть и потомком, и предком одновременно. Например, объект дом является потомком гаража и предком, например, для многоэтажки.
Потомок наследует свойства предка, поэтому всегда знает, какие у него свойства, а предок не может знать свойства своего потомка, потому что он не знает, какие свойства будут добавлены в новый класс. Это необходимо знать и понимать. В будущем мы будет использовать это для создания некоторых программистских трюков.
Точно такой же метод наследования принят и в объектно-ориентированных языках. На рис. 4.2 показан фрагмент иерархии объектов Delphi. Как видно из рисунка, все объекты происходят от TObject. Это базовый объект, который реализует основные свойства И методы. От него происходит TPersistent И TThread. В реальности от TObject происходит намного больше объектов, и все они знают о его свойствах и методах и наследуют их себе.