Переопределение методов

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