Кафедра «Программное обеспечение вычислительной техники и автоматизированных систем»
ЛАБОРАТОРНАЯ РАБОТА
«НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ»
Ростов-на-Дону
Цель работы: освоить понятие наследования классов. Изучить принципы работы с классом потомком и классом предком.
Теоретическая часть
Класс может быть унаследован от другого класса. Класс, от которого наследуют, называют базовым классом (надклассом, предком), а класс, который наследуется, называется производным классом (подклассом, потомком). При наследовании все поля, методы и свойства базового класса переходят в производный класс, кроме этого, могут быть добавлены новые поля, методы и свойства и переопределены (замещены) старые методы.
При описании класса его базовый класс указывается в скобках после слова class.
Например:
type
BaseClass = class
procedure p;
procedure q(r: real);
end;
MyClass = class(BaseClass)
procedure p;
procedure r(i: integer);
end;
В данном примере процедура p переопределяется, а процедура r добавляется в класс MyClass.
Если не указать имя базового класса, то считается, что класс наследуется от класса Object - предка всех классов. Например, BaseClass наследуется от Object.
Перед словом class может быть указано ключевое слово final – в этом случае от класса запрещено наследовать.
Пример.
type
parent=class
protected
x:integer;
public
constructor;
begin
x:=5;
end;
constructor(z:integer);
begin
x:=z;
end;
procedure show; virtual;
begin
writeln('parent ',x);
end;
end;
child=class(Parent)
private
y:integer;
function GetY:integer;
begin
Result:=y;
end;
procedure SetY(yy:integer);
begin
y:=yy;
end;
public
constructor;
begin
inherited create;
y:=6;
end;
constructor(t,q:integer);
begin
inherited create(t);
y:=q;
end;
procedure show; override;
begin
writeln('child ',y,' ', self.x);
end;
property PY: integer read GetY write SetY;
end;
var mas:array[1..3] of Parent;
c:Child;
BEGIN
mas[1] := new parent(4);
mas[2] := new child;
c:=mas[2] as Child;
c.PY:=33;
mas[3] := new child(10,8);
for var i:=1 to 3 do mas[i].show();
END.
Пример. Использование наследования классов для работы с несколькими формами