SmartPascal
Override
Directive
Defines a method that replaces a virtual parent class method
  Function|Procedure declaration; Override;
Description
The Override directive defines a class method as overriding the same named method in a parent class.
 
For example, you might want to override (replace) the operation of the constructor to take into account the class changes introduced by your class.
 
You can only override classes defined as virtual or dynamic (the latter are beyond the scope of Smart Pascal).
 
Only those methods that can be sensibly overriden by a derived class are normally allowed to do so.
 
If a method is marked as abstract as well as virtual then you must override it and implement it for it to be useable by a user of your class.
Related commands
Abstract Defines a class method only implemented in subclasses
Function Defines a subroutine that returns a value
Overload Allows 2 or more routines to have the same name
Procedure Defines a subroutine that does not return a value
 
Example code : Overriding abstract methods
// Full Unit code.
// -----------------------------------------------------------
// You must store this code in a unit called Unit1 with a form
// called Form1 that has an OnCreate event called FormCreate.

unit Unit1;

interface

uses
  Forms, Dialogs, Classes, Controls, StdCtrls, SysUtils;

type
  // Define a base TPolygon class :
  // This class is a triangle if 3 sides, square if 4 sides ...
  TPolygon = class
  private
    sideCount  : Integer;  // How many sides?
    sideLength : Integer;  // How long each side?
    shapeArea  : Double;   // Area of the polygon
  protected
     procedure setArea; Virtual; Abstract;  // Cannot code until sides known
  published
    property count  : Integer read sideCount;
    property length : Integer read sideLength;
    property area   : Double  read shapeArea;
    constructor Create(sides, length : Integer);
  end;

  // Define triangle and square descendents
  TTriangle = class(TPolygon)
  protected
    procedure setArea; Override;   // Override the abstract method
  end;

  TSquare = class(TPolygon)
  protected
    procedure setArea; Override;   // Override the abstract method
  end;

  // Define the form class used by this unit
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm} // Include form definitions

// Create the TPolygon object
constructor TPolygon.Create(sides, length : Integer);
begin
  // Save the number and length of the sides
  sideCount := sides;
  sideLength := length;

  // Set the area using the abstract setArea method :
  // This call will be satisfied only by a subclass
  setArea;
end;

// Implement the abstract setArea parent method for the triangle
procedure TTriangle.setArea;
begin
  // Calculate and save the area of the square
  shapeArea := (sideLength * sideLength) / 2;
end;

// Implement the abstract setArea parent method for the square
procedure TSquare.setArea;
begin
  // Calculate and save the area of the square
  shapeArea := sideLength * sideLength;
end;

// Main line code
procedure TForm1.FormCreate(Sender: TObject);
var
  triangle : TTriangle;
  square   : TSquare;
begin
  // Create a triangle and a square
  triangle := TTriangle.Create(3, 10);
  square   := TSquare.Create(4, 10);

  // Show the areas of our polygons:
  ShowMessageFmt('Triangle area = %f',[triangle.area]);
  ShowMessageFmt('Square   area = %f',[square.area]);
end;

end.
   Triangle area = 50.0
   Square   area = 100.0