Begin
Begin
Begin
Type
N Пример.
Protected
Private
N Пример.
Begin
inherited Create(Name);
fdepartment:= dep;
end;
После создания объекта класса-потомка в программе можно использовать поля и методы родительского класса.
Фрагмент программы, демонстрирующий указанную возможность:
Создание объекта класса
professor:= TProfessor.Create(‘Петров’, ‘ММФ’);
установка значения свойства родительского класса
professor.Address:= ‘ул. Ленина, 210, кв.11’;
применение метода родительского класса
professor.Show;
Директивы
protected (защищенный) и
private (закрытый)
устанавливают степень видимости элементов класса в программе.
Элементы класса, объявленные в секции protected, доступны только в классах, порожденных от данного класса.
Область видимости этих элементов не ограничивается модулем, в котором находится описание класса.
Обычно в секцию protected помещают описание методов класса.
Элементы класса, объявленные в секции private, видимы только внутри модуля.
Эти элементы не доступны за пределами модуля, даже в производных классах.
Обычно в секцию private помещают описание полей класса, а методы, обеспечивающие доступ к этим полям, – в секцию protected.
|
|
Описание класса TPerson, включающее директивы управления доступом:
TPerson = class
fname: TName;
faddress: TAddress;
constructor Create (Name: TName);
procedure Show;
function GetName: TName;
function GetAddress: TAddress;
procedure SetAddress (NewAddress: TAddress);
property Name: TName
read GetName;
property Address: TAddress
read GetAddress write SetAddress;
end;
3.Полиморфизм
Полиморфизм – это возможность использовать одинаковые имена для методов, входящих в различные классы.
Концепция полиморфизма обеспечивает применение к объекту именно того метода, который соответствует классу объекта.
Если в описании родительского класса метод объявлен как виртуальный (директива virtual), то каждый класс-потомок имеет возможность заменить виртуальный метод своим собственным методом.
Эта замена выполняется с помощью директивы override.
Рассмотрим определение трех классов:
TPerson – родительский класс,
Tproffessor и TStudent – классы, порожденные от TPerson.
TPerson = class
fname: string;
faddress: string;
constructor Create (Name, Address: string);
function Info: string; virtual;//объявление
end;виртуальногометода
TProfessor = class (TPerson)
fdepartment: string;
constructor Create (Name, Address, Dep: string);
function Info: string; override; замещение метода родительского класса
end;
класс-потомок TStudent = class (TPerson)
fgroup: integer;
constructor Create (Name, Address: string: Group: Integer);
function Info: string; override; замещение метода родительского класса
end;
Определение метода Info для каждого класса (в разделе Implementation):
function TPerson.Info: string;
result:= ‘’;
end;
function TProfessor.Info: string;
result:= fname + ‘ кафедра ‘ + fdepartment;
end;
function TStudent.Info: string;
result:= fname + ‘ группа ‘ + IntToStr (fgroupe);
end;
Пример для закрепления
Type Coordinates = class x, y: byte; procedure Init (Xinit, Yinit: byte); function GetX: byte; function GetY: byte; end; | Type Cursor = class (coordinates) Hidden: Boolean; end; |
Закрепление к лекции 6
|
|
Тема: Компоненты и их свойства и методы.
Вопросы: