Metody domyślnie są statyczne. Kiedy statyczna metoda jest wywoływana, deklarowany typ klasy lub zmienna obiektowa użyta w wywołaniu metody determinuje która implementacja jest aktywowana. Jest to ustalone już w czasie kompilacji. W następującym przykładzie, metoda Draw jest statyczna.
type TFigure = class procedure Draw; end; TRectangle = class(TFigure) procedure Draw; end;
Mając te deklaracje, następujący kod ilustruje efekt wywołania metody statycznej. W drugim wywołaniu Figure.Draw, zmienna Figure reprezentuje obiekt klasy TRectangle, ale wywołanie uruchamia implementację metody Draw klasy TFigure, ponieważ zadeklarowano zmienną Figure jako TFigure.
var Figure: TFigure; Rectangle: TRectangle; begin Figure := TFigure.Create; Figure.Draw; // aktywuje TFigure.Draw Figure.Destroy; Figure := TRectangle.Create; Figure.Draw; // aktywuje TFigure.Draw TRectangle(Figure).Draw; // aktywuje TRectangle.Draw Figure.Destroy; Rectangle := TRectangle.Create; Rectangle.Draw; // aktywuje TRectangle.Draw Rectangle.Destroy; end;