子类和父类间的相互调用关系

 1 unit  Unit1;
 2
 3 interface
 4
 5 type
 6   TForm1  =   class (TForm)
 7     Button1: TButton;
 8     Button2: TButton;
 9      procedure  Button1Click(Sender: TObject);
10      procedure  Button2Click(Sender: TObject);
11    private
12      {  Private declarations  }
13    public
14      {  Public declarations  }
15    end ;
16
17 implementation
18    uses
19    Person, ET;   // 引用自定义的两个类
20 procedure  TForm1.Button1Click(Sender: TObject);
21  VAR
22   tulater: TPerson;
23 begin
24   tulater : =  TPerson.Create;  // Blood此时初始化为 ' O '
25   tulater.myName : =   ' 涂磊 ' ;
26   tulater.High : =   156 ;
27    // tulater.DNA : =   ' asdfwefkooj3249rrj9 ' ;
28 // 上面一行错: // Protected属性在此单元内(属性定义的单元)和子类属性定义的单元内可见 和直接访问使用 DNA
29
30   tulater.setDNA( ' asdfwefkooj3249rrj9 ' );
31 // 只能以上面方法间接访问Protected属性,通过public的方法
32   //  tulater.Blood : =   ' O ' ;
33 // 上面一行错: // Private属性只在Blood属性定义的单元内可见,和直接访问使用 Blood
34   ShowMessage(tulater.myName  +  # 13 # 10   +   ' 身高=  '   +  IntToStr(tulater.High)  +  # 13 # 10   +   ' 血型=  '   +  tulater.getBlood
35    +  # 13 # 10   +   ' DNA=  '   +  tulater.getDNA);
36   tulater.Free;
37 end ;
38
39 procedure  TForm1.Button2Click(Sender: TObject);
40  VAR
41   ETfish: TET;
42 begin
43   ETfish : =  TET.Create;
44   ETfish.myName : =   ' 外星鱼 ' ;
45   ETfish.High : =   15 ;
46    // ETfish.DNA : =   ' asdfwe$%#%#%%Q#%%#%24#9rrj9 ' ;
47   ETfish.setDNA( ' asdfwe$%#%#%%Q#%%#%24#9rrj9 ' );
48   //  ETfish.Blood : =   ' O ' ;
49   ShowMessage(ETfish.myName  +  # 13 # 10   +   ' 身高=  '   +  IntToStr(ETfish.High)  +  # 13 # 10   +
50    ' 血型=  '   +  ETfish.getBlood   +  # 13 # 10   +
51    ' DNA=  '   +  ETfish.getDNA  +  # 13 # 10   +
52    ' UFOSpeed=  '   +  IntToStr(ETfish.getUFOSpeed) ) ;
53   ShowMessage( ' 初始化时 UFOSpeed= '   +  IntToStr(ETfish.getUFOSpeed));
54   ETfish.setUFOSpeed( 41458174 );
55   ShowMessage( ' 现在 UFOSpeed= '   +  IntToStr(ETfish.getUFOSpeed));
56
57   ETfish.Free;
58 end ;
59
60 end .
61
62

 1 unit  ET;   // TET类声明所在单元
 2 interface
 3    uses
 4    CLASSES,Dialogs,Person;
 5 TYPE
 6   TET  =  CLASS(TPerson)  // 完全继承Person所有的属性和方法
 7    private           // 加入子类新的属性和方法
 8     UFOSpeed: Integer;
 9      {  Private declarations  }
10    public
11     CONSTRUCTOR Create;
12     PROCEDURE setUFOSpeed(aSpeed: Longword);
13     FUNCTION getUFOSpeed: Longword;
14      {  Public declarations  }
15    end ;
16 implementation
17
18 FUNCTION TET.getUFOSpeed: Longword;
19 BEGIN
20     result : =  self.UFOSpeed;      // 读取Private 成员的值
21 end ;
22
23 PROCEDURE TET.setUFOSpeed(aSpeed: Longword);
24 BEGIN
25    self.UFOSpeed : =  aSpeed;    // 以参数设定Private 成员的值
26 end ;
27
28 CONSTRUCTOR TET.Create;
29 BEGIN
30   INHERITED Create;    // 调用直接父类Tperson的Create方法 //   ShowMessage( ' Tperson.Create 执行 ' );
31   ShowMessage( ' TET.Create 执行 ' );
32   Self.UFOSpeed : =   300000000 ;     // Private属性只在属性定义的单元内可见,只可以在这里这样直接访问使用 UFOSpeed
33 end ;
34 VAR    // 为测试而设置此区
35   AET : TET;
36 BEGIN
37   AET : =  TET.Create;
38   AET.DNA : =   ' fdsafsrfwefsd$#^^3 ' ; // 父类的Protected属性在子类单元(本单元)内可见 ,在这里这样直接访问使用
39    // AET.Blood : =   ' A ' // 父类的Private属性在子类单元(本单元)内不可见(只在其属性定义的单元内可见) ,在这里这样不能直接访问使用
40   ShowMessage( ' AET.DNA =  '   +  AET.DNA );
41   AET.Free;
42 end .
43 end .
44
45

转载于:https://www.cnblogs.com/dreamszx/archive/2009/09/22/1572013.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值