Mega Code Archive

 
Categories / Delphi / Compiler Directives
 

Override - 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 Delphi basics). 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 traingle 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