Управлять большим количеством разрозненных объектов сложно. С этим можно справиться путем упорядочивания и ранжирования объектов, т. е. объединяя общие для нескольких объектов свойства в одном объекте и используя этот объект в качестве базового.
Эту возможность предоставляет механизм наследования. Он позволяет строить иерархии, в которых объекты-потомки получают свойства объектов-предков и могут дополнять их или изменять. Таким образом, наследование обеспечивает возможность повторного использования кода.
При описании объекта имя его предка записывается в круглых скобках после ключевого слова object.
Пусть требуется ввести в игру еще один тип персонажей, который должен обладать свойствами объекта monster, но по-другому выглядеть и атаковать:
type daemon = object (monster).
procedure init (x_, y_, health_, ammo_, magic_: word);
procedure attack; procedure draw; procedure erase; procedure wizardry; private.
magic: word; end;
{ реализация методов объекта daemon }.
procedure daemon. init (x_, y_, health_, ammo_, magic_: word); begin.
inherited init (x_, y_, health_, ammoj; color:= green; magic:= magic_; end;
Наследование полей. Унаследованные поля доступны в объекте точно так же, как и его собственные. Изменить или удалить поле при наследовании нельзя. Таким образом, потомок всегда содержит число полей, большее или равное числу полей своего предка.
Наследование методов. В «потомке» объекта можно не только описывать новые методы, но и переопределять существующие. Метод можно переопределить либо полностью, либо дополнив метод «предка» .
Последний вариант иллюстрируется с помощью метода init. В объекте daemon этот метод переопределен. Из него с помощью ключевого слова inherited (унаследованный) сначала вызывается старый метод, а затем выполняются дополнительные действия. Можно вызвать метод «предка» и явным образом с помощью конструкции monster. init.