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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93