9.2.3. Одноименные методы

В отличие от остальных версий Delphi в версиях 4...6 появилась возможность в рамках одного класса иметь несколько одноименных методов. Описанный выше механизм перекрытия родительского метода одноименным методом потомка приводит к тому, что потомок “не видит” перекрытый родительский метод и может обращаться к нему лишь с помощью зарезервированного слова inherited. В Delphi 4 введено зарезервированное слово overload (перезагрузить), с помощью которого становятся видны одноименные методы как родителя, так и потомка.

При обнаружении одноименного метода компилятор Delphi предупреждает о том, что у класса уже есть аналогичный метод с дру гими параметрами. Для подавления сообщений объявление одноименного метода можно сопровождать зарезервированным словом reintrpduce (вновь ввести).

Примечание

> Чтобы одноименные методы можно было отличить друг от друга,каждый из них должен иметь уникальный набор, параметров. В ходе шлпоянения программы при: обращении к одному, из одноименнх методов программа проверяет; тип и количество фактических параметров обращения и выбирает нужный метод

В следующем примере в классе TForm1 используются целых 4 одноименных метода close. Лишь один из них - унаследованный метод без параметра выполняет свои основные функции - закрывает окно. Три других отличаются набором параметров и выводят сообщение в заголовок окна.

Поместите на пустую форму четыре кнопки TButton и напишите такие обработчики их событий OnClick:

procedure TForm1.ButtonlClick(Sender: TObject);

begin

Close('Строка символов')

end;

procedure TFormi.Button2Click(Sender: TObject);

begin

Close(123)

end;

procedure TFormi.ButtonSClick(Sender: TObject);

begin

Close (20,300) ;

end;

procedure TFormi.Button4Click(Sender: TObject);

begin

Close end;

Теперь в раздел private класса Tform1 вставьте три таких объявления методов close:

private

{ Private declarations }

procedure Close(S: String);

reintroduce;

overload;

procedure Close(I: Integer);

reintroduce;

overload;

procedure Close(I,J: Integer);

reintroduce;

overload;

И, наконец, в разделе implementation поместите описания объявленных методов:

procedure TForm1.Close(S: String) ;

begin

Caption := S end;

procedure TFormI.Close(I: Integer);

begin

Caption := IntToStr(I) end;

procedure TFormI.close(I,J: Integers);

begin

Caption := IntToStr(i*j)

end;

Теперь после запуска программы три первые кнопки будут вызывать методы close класса Tform1 и менять заголовок окна, в то время как кнопка Button4 обратится к методу close родительского класса т Form и закроет окно.