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
