Переопределение методов
Метод базового класса может быть переопределен (замещен) в подклассах. Если
при этом требуется вызвать метод базового класса, то используется служебное
слово inherited
(англ.-
унаследованный). Например:
type
Person = class
private
name: string;
age: integer;
public
constructor Create(nm: string; ag: integer);
begin
name := nm;
age := ag;
end;
procedure Print;
begin
writeln('Имя: ',name,' Возраст: ',age);
end;
end;
Student = class(Person)
private
course, group: integer;
public
constructor Create(nm: string; ag,c,gr:
integer);
begin
inherited Create(nm,ag);
course := c;
group := gr;
end;
procedure Print;
begin
inherited Print;
writeln('Курс: ',course,' Группа: ',group);
end;
end;
Здесь метод Print
производного класса Student
вызывает вначале метод Print
, унаследованный от базового класса
Person
, с помощью конструкции inherited Print
.
Аналогично конструктор Create
класса Student
вызывает
вначале конструктор Create
базового класса Person
,
также используя служебное слово inherited
.
Правила наследования конструкторов рассматриваются здесь.
Следует обратить внимание, что конструктор базового класса вызывается в этом случае как процедура, а не как функция, при этом создания нового объекта не происходит.
Если в методе вызывается метод базового класса с теми же параметрами, то
можно использовать запись inherited, не указывая имя
метода и параметры. Например, метод Student.Print
можно записать
таким образом:
procedure Print;
begin
inherited;
writeln('Курс: ',course,' Группа: ',group);
end;