Концепция объектно-ориентированного программирования предполагает возможность определять новые классы посредством добавления полей, свойств и методов к уже существующим классам. Такой механизм получения новых классов называется порождением. При этом новый, порожденный, класс (класс-потомок) наследует свойства и методы своего базового, родительского класса.
В объявлении класса-потомка указывается класс родителя. Например, класс TEmployee (сотрудник) может быть порожден от рассмотренного выше класса TTPerson путем добавления поля Department (отдел). Объявление класса TEmployee в этом случае может выглядеть так:
TEmployee = class(TTPerson)
FDepartment:integer; // номер отдела
constructor Create(Name:TName;Dep:integer);
end;
Заключенное в скобки имя класса TTPerson показывает, что класс TEmployee является производным от класса TTPerson. В свою очередь, класс TTPerson является базовым для класса TEmployee.
Класс TEmployee имеет свой собственный конструктор, который обеспечивает инициализацию класса родителя и своих полей. Пример реализации конструктора класса TEmployee:
constructor TEmployee.Create(Name:Tname;Dep:integer);
begin
inherited Create(Name);
FDepartment:=Dep;
end;
В приведенном примере директивой inherited вызывается конструктор родительского класса, затем присваивается значение полю класса потомка.
После создания объекта производного класса в программе можно использовать поля и методы родительского класса. Ниже приведен фрагмент программы, демонстрирующей эту возможность:
engineer:=TEmployee.create('Сидоров',413);
engineer.address:='ул.Блохина, д.8, кв.10';
Первый оператор создает объект типа TEmployee. Второй устанавливает значение свойства, которое относится к родительскому классу.
|