覆盖(overriding)与隐藏(hiding)的差别

 1 type
 2   TOldDog  =   class (TDog)
 3    public
 4   PROCEDURE Bark(Timens: Integer);OVERRIDE;    // 子类  TOldDog覆盖父类TDog方法 Bark
 5    // 变量个数必须对应,但每个变量名可以不与父类方法一样
 6      {  Public declarations  }
 7    end ;
 8 type
 9   TLittleDog  =   class (TDog)
10    public
11   PROCEDURE Barkm;
12 // [Warning] : Method  ' Bark '  hides  virtual  method  of  base  type   ' TDog '
13 // 这是子类重新定义,跟父类的Bark无任何关系,所以会把父类的Bark方法隐藏(Hiding)
14 // 若其后加reintroduce修饰符可去除编译的警告
15 // [Warning] Unit1.pas( 31 ): Method  ' Bark '  hides  virtual  method  of  base  type   ' TDog '
16      {  Public declarations  }
17    end ;
18 PROCEDURE TLittleDog.Barkm; // TLittleDog的Bark方法的实现
19 BEGIN
20   ShowMessage( ' 嗷嗷~~~邀邀 ' );
21 end ;
22
23 PROCEDURE TOldDog.Bark(Timens: Integer);  // TOldDog的Bark方法的实现
24 BEGIN
25   ShowMessage( ' 嗷~~~呜~~~ '   +  # 13   +  # 13   + '  给我  '   +  IntToStr(Timens)  +   '  根骨头 ' );
26 end ;
27
28 PROCEDURE TDog.Bark(Times: Integer);   // TDog的Bark方法的实现
29 VAR
30   i: Integer;
31 BEGIN
32   i : =  Times;
33   IF i  >   5  THEN
34   ShowMessage( ' 没力,叫不出来! ' )
35    else
36    FOR I : =   1  TO Times  DO     //  Iterate
37      ShowMessage( ' 汪~~ 第  '   +  IntToStr(i)  +   '  声 ' );
38     //   for
39 end ;
40
41 procedure  TForm1.Button1Click(Sender: TObject);
42 VAR
43   SmallWhite: TDog;
44   bkTimes: Integer;
45 begin
46    SmallWhite : =  TDog.Create;    // 建立TDog的对象
47    SmallWhite.Name : =   ' 小白 ' ;
48    Edit1.Text : =   ' 狗狗叫做  '   +  SmallWhite.Name;
49    bkTimes : =  StrToInt(InputBox( ' 要  '   +  SmallWhite.Name  +   ' 叫几声? ' ' 输入次数(限整数) ' ' 3 ' ));
50    SmallWhite.Bark(bkTimes);   // 调用的是TDog的Bark方法
51    SmallWhite.Free;            // 析构TDog的对象
52 end ;
53
54 procedure  TForm1.Button2Click(Sender: TObject);
55 VAR
56   OldBlack: TOldDog;
57 begin
58    OldBlack : =  TOldDog.Create;    // 建立TOldDog的对象
59    OldBlack.Name : =   ' 老黑 ' ;
60    Edit1.Text : =   ' 老狗叫做  '   +  OldBlack.Name;
61    OldBlack.Bark( 6 );     // 调用的是TOldDog覆盖后的Bark方法
62    OldBlack.Free;       // 析构TOldDog的对象
63 end ;
64
65 procedure  TForm1.Button3Click(Sender: TObject);
66 VAR
67   Spot: TLittleDog;
68 begin
69    Spot : =  TLittleDog.Create;   // 建立TLittleDog的对象
70    Spot.Name : =   ' 小花 ' ;
71    Edit1.Text : =   ' 小狗叫做  '   +  Spot.Name;
72    Spot.Barkm;       // 调用的是TLittleDog重新定义的Bark方法
73    Spot.Free;       // 析构TLittleDog的对象
74 end ;
75
76 procedure  TForm1.Button4Click(Sender: TObject);
77 VAR
78   aDog: TDog;    // 定义为TDog类的对象变量 
79 begin
80    aDog : =  TOldDog.Create;    // 用子类TOldDog建立父类TDog的对象
81    Label1.Caption : =   ' aDog 参考ToldDog对象 ' ;
82    aDog.Bark( 2 );   // 调用的是TOldDog的Bark方法
83    aDog.Free;            // 析构TOldDog的对象
84
85    aDog : =  TLittleDog.Create;    // 用子类TLittleDog建立父类TDog的对象
86    Label1.Caption : =   ' aDog 参考TLittleDog对象 ' ;
87    aDog.Bark( 2 );  // 调用的是父类TDog的Bark方法
88   //   aDog.Barkm;   // 无法Bind(绑定到)TLittleDog的Bark方法 , 因为跟 父类TDog无任何关系.
89    aDog.Free;            // 析构TDog的对象
90
91 end ;
92
93

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值