Examples of Inherited with and without explicit parent method names

  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.

// 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
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值