Delphi 之Inherited详解


inherited就是调用祖先类的函数,如果不带参数就是默认调用同名函数
如果带参数则表明子类中的函数个数可能比祖先类要多取其中的几个参数传过去
例如
祖先类有个函数 Create(AName:string);
子类有个函数 Create(AName:string;AComponent:TObject);override;
那么子类的Create函数内就可以这样调用祖先类:
procedure TAClass.Create(AName:string;AComponent:TObject);
begin
Inherited Create(AName);
end;

Inherited

Keyword

Used to call the parent class constructor or destructor method
1Create;

begin

Inherited; // Always call at the start of a constructor

...

end;

2Create(arguments);

begin

Inherited Create(arguments); // Always call at the start of a constructor

...

end;

3Destroy;

begin

...

Inherited; // Always call at the end of a destructor

end;

Description
The Inherited keyword is used to call the parent constructor or destructor method, as appropriate, for the current class.

It is called at the start of a constructor, and at the end of a desctructor. It is not mandatory, but recommended as good practice.

Without parameters, Inherited calls the same named method the parent class, with the same parameters.

You can call a different parent method, if appropriate.

Related commands
ClassStarts the declaration of a type of object class
ConstructorDefines the method used to create an object from a class
DestructorDefines the method used to destroy an object
FunctionDefines a subroutine that returns a value
ObjectAllows a subroutine data type to refer to an object method
OverloadAllows 2 or more routines to have the same name
OverrideDefines a method that replaces a virtual parent class method
ProcedureDefines a subroutine that does not return a value
Example code : Examples of Inherited with and without explicit parent method names
// 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;

type

// Define a parent class, base on TObject by default

TFruit = class

public

name : string;

Constructor Create; overload; // This constructor uses defaults

Constructor Create(name : string); overload;

end;

// Define a descendant types

TApple = class(TFruit)

public

diameter : Integer;

published

Constructor Create(name : string; diameter : Integer);

end;

// The class for the form used by this unit

TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);

end;

var

Form1: TForm1;

implementation

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

// Create a fruit object - parameterless version

constructor TFruit.Create;

begin

// Execute the parent (TObject) constructor first

Inherited; // Call the parent Create method

// Now set a default fruit name

self.name := 'Fruit';

end;

// Create a fruit object - parameterised version

constructor TFruit.Create(name: string);

begin

// Execute the parent constructor first

Inherited Create; // Call the parent Create method

// And save the fruit name

self.name := name;

end;

// Create an apple object

constructor TApple.Create(name: string; diameter : Integer);

begin

// Execute the parent (TFruit) constructor first

Inherited Create(name); // Call the parent method

// Now save the passed apple diameter

self.diameter := diameter;

end;

// Main line code

procedure TForm1.FormCreate(Sender: TObject);

var

fruit : TFruit;

banana : TFruit;

apple : TApple;

begin

// Create 3 different fruit objects

fruit := TFruit.Create;

banana := TFruit.Create('Banana');

apple := TApple.Create('Pink Lady', 12);

// See which of our objects are fruits

if fruit Is TFruit then ShowMessage(fruit.name +' is a fruit');

if banana Is TFruit then ShowMessage(banana.name +' is a fruit');

if apple Is TFruit then ShowMessage(apple.name +' is a fruit');

// See which objects are apples

if fruit Is TApple then ShowMessage(fruit.name +' is an apple');

if banana Is TApple then ShowMessage(banana.name +' is an apple');

if apple Is TApple then ShowMessage(apple.name +' is an apple');

end;

end.

Fruit is a fruit

Banana is a fruit

Pink Lady is a fruit

Pink Lady is an apple