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
type2
TOldDog = class(TDog)3
public4
PROCEDURE Bark(Timens: Integer);OVERRIDE; //子类 TOldDog覆盖父类TDog方法 Bark5
//变量个数必须对应,但每个变量名可以不与父类方法一样6
{ Public declarations }7
end;8
type9
TLittleDog = class(TDog)10
public11
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
BEGIN20
ShowMessage('嗷嗷~~~邀邀');21
end;22

23
PROCEDURE TOldDog.Bark(Timens: Integer); //TOldDog的Bark方法的实现24
BEGIN25
ShowMessage('嗷~~~呜~~~' + #13 + #13 +' 给我 ' + IntToStr(Timens) + ' 根骨头');26
end;27

28
PROCEDURE TDog.Bark(Times: Integer); //TDog的Bark方法的实现29
VAR30
i: Integer;31
BEGIN32
i := Times;33
IF i > 5 THEN34
ShowMessage('没力,叫不出来!')35
else36
FOR I := 1 TO Times DO // Iterate37
ShowMessage('汪~~ 第 ' + IntToStr(i) + ' 声');38
// for39
end;40

41
procedure TForm1.Button1Click(Sender: TObject);42
VAR43
SmallWhite: TDog;44
bkTimes: Integer;45
begin46
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
VAR56
OldBlack: TOldDog;57
begin58
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
VAR67
Spot: TLittleDog;68
begin69
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
VAR78
aDog: TDog; //定义为TDog类的对象变量 79
begin80
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

浙公网安备 33010602011771号