logo
Лекции програм_new_последняя версия1

Статические методы.

По умолчанию методы класса являются статическими – их адрес определяется во время компиляции программы (раннее связывание), поэтому они вызываются быстрее всего.

В одноименных статических методах порожденных классов списки параметров могут отличаться.

Со статическим методом связан следующий способ наследования: если в описании потомка появляется метод с тем же именем, что и у предка, то в этом типе и во всех его потомках этот метод будет перекрыт (замещен, переопределен).

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

Например:

type TFigure=class

procedure draw;

end;

TRectangle=class (TFigure)

procedure draw; {эта процедура будет перекрыта

предыдущей}

end;

… … … …

var Figure:TFigure;

Rectangle:TRectangle;

begin

Figure:=TFigure.create;{конструктор create уноследова

у предка}

Figure.draw;

{вызывается метод draw класса TFigure}

Figure.free; {уничтожаем объект Figure}

Figure:=TRectangle.create; {Figure-новая, отличная от

предыдущей}

Figure.draw;

{вызывается метод draw класса TRectangle}

Figure.free;

Rectangle:=TRectangle.create; {описываем новую

переменную}

Rectangle.draw;

{вызывается метод draw класса TRectangle}

Rectangle.free;

end.

Здесь разные методы с именами draw вызываются в разных классах. Их адрес определяется при компиляции, поэтому статические методы вызываются быстрее всех.