Метод базового класса может быть переопределен (замещен) в подклассах. Если
при этом требуется вызвать метод базового класса, то используется служебное
слово 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;