abstract成员函数与多态(polymorphic)
2009-09-22 17:50
302 查看
1type
2 TMan = class(Tobject)
3 public
4 PROCEDURE Dance;VIRTUAL;abstract; //定义为纯虚函数,待子类来覆盖
5 { Public declarations }
6 end;
7type
8 TEuropean = class(TMan)
9 public
10 PROCEDURE Dance;OVERRIDE; // TEuropean子类覆盖父类 TMan的Dance方法
11 // abstract,OVERRIDE是成对出现的
12 { Public declarations }
13 end;
14type
15 TNorthEuropean = class(TEuropean) //继承了 TEuropean,可以不用Override纯虚函数
16// PROCEDURE Dance;OVERRIDE; //还可以被孙类 TNorthEuropean所覆盖子类 TEuropean的Dance方法
17 end;
18type
19 TAsian = class(TMan)
20 public
21 PROCEDURE Dance;OVERRIDE; //必须Override纯虚函数 Dance
22 { Public declarations }
23 end;
24type
25 TForm1 = class(TForm)
26 Button1: TButton;
27 procedure Button1Click(Sender: TObject);
28 private
29 { Private declarations }
30 public
31 { Public declarations }
32 end;
33
34{ PROCEDURE TNorthEuropean.Dance; // TEuropean TManDance;
35BEGIN
36 ShowMessage('TNorthEuropean.Dance');
37end; }
38
39PROCEDURE TAsian.Dance; //TAsian的Dance 实现
40BEGIN
41 ShowMessage(self.ClassName + '对象 ' + #13 + #13 +
42 '执行 TAsian.Dance' + #13 + #13 +
43 '亚洲人爱跳探戈');
44end;
45
46PROCEDURE TEuropean.Dance; //TEuropean的Dance 实现
47BEGIN
48 ShowMessage(self.ClassName + '对象 ' + #13 + #13 +
49 '执行 TEuropean.Dance' + #13 + #13 +
50 '欧洲人爱跳拉丁舞');
51end;
52
53procedure TForm1.Button1Click(Sender: TObject);
54 VAR
55 SuperMan: TMan;
56begin
57 SuperMan := TEuropean.Create;
58 SuperMan.Dance; //调用的是TEuropean的Dance 方法
59 SuperMan.Free;
60
61 SuperMan := TNorthEuropean.Create;
62 SuperMan.Dance; //调用的是TEuropean的Dance 方法
63 SuperMan.Free;
64
65 SuperMan := TAsian.Create;
66 SuperMan.Dance; //调用的是TAsian的Dance 方法
67 SuperMan.Free;
68end;
69
70
2 TMan = class(Tobject)
3 public
4 PROCEDURE Dance;VIRTUAL;abstract; //定义为纯虚函数,待子类来覆盖
5 { Public declarations }
6 end;
7type
8 TEuropean = class(TMan)
9 public
10 PROCEDURE Dance;OVERRIDE; // TEuropean子类覆盖父类 TMan的Dance方法
11 // abstract,OVERRIDE是成对出现的
12 { Public declarations }
13 end;
14type
15 TNorthEuropean = class(TEuropean) //继承了 TEuropean,可以不用Override纯虚函数
16// PROCEDURE Dance;OVERRIDE; //还可以被孙类 TNorthEuropean所覆盖子类 TEuropean的Dance方法
17 end;
18type
19 TAsian = class(TMan)
20 public
21 PROCEDURE Dance;OVERRIDE; //必须Override纯虚函数 Dance
22 { Public declarations }
23 end;
24type
25 TForm1 = class(TForm)
26 Button1: TButton;
27 procedure Button1Click(Sender: TObject);
28 private
29 { Private declarations }
30 public
31 { Public declarations }
32 end;
33
34{ PROCEDURE TNorthEuropean.Dance; // TEuropean TManDance;
35BEGIN
36 ShowMessage('TNorthEuropean.Dance');
37end; }
38
39PROCEDURE TAsian.Dance; //TAsian的Dance 实现
40BEGIN
41 ShowMessage(self.ClassName + '对象 ' + #13 + #13 +
42 '执行 TAsian.Dance' + #13 + #13 +
43 '亚洲人爱跳探戈');
44end;
45
46PROCEDURE TEuropean.Dance; //TEuropean的Dance 实现
47BEGIN
48 ShowMessage(self.ClassName + '对象 ' + #13 + #13 +
49 '执行 TEuropean.Dance' + #13 + #13 +
50 '欧洲人爱跳拉丁舞');
51end;
52
53procedure TForm1.Button1Click(Sender: TObject);
54 VAR
55 SuperMan: TMan;
56begin
57 SuperMan := TEuropean.Create;
58 SuperMan.Dance; //调用的是TEuropean的Dance 方法
59 SuperMan.Free;
60
61 SuperMan := TNorthEuropean.Create;
62 SuperMan.Dance; //调用的是TEuropean的Dance 方法
63 SuperMan.Free;
64
65 SuperMan := TAsian.Create;
66 SuperMan.Dance; //调用的是TAsian的Dance 方法
67 SuperMan.Free;
68end;
69
70
相关文章推荐
- java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况
- java之多态调用成员变量,成员函数,静态函数的特点
- 面向对象、类与对象、成员与局部变量、封装、private、构造函数、this、static、extends、super、final、abstract、interface、多态、内部类、异常【5】
- java之多态调用成员变量,成员函数,静态函数的特点
- 多态 多态中成员函数的特点 interface 的应用
- 成员函数指针有多态的效果吗?
- 多态的好处和弊端案例(成员变量,成员函数,静态成员函数,接口)会用到instance
- Java面向对象 多态动态绑定(非静态成员函数、成员变量、静态成员函数)
- java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况
- java 构造函数 成员函数初始化顺序 以及多态的构造函数的调用顺序
- 多态中成员函数的特点
- 用例子来理解c++的类,构造函数,类的多态,成员函数,成员变量
- 多态在成员变量,成员函数以及静态函数中的用法区别
- 黑马程序员之多态中成员变量与成员函数的异同
- 成员函数的多态,重载,隐藏
- 多态中函数、成员、静态函数的特点
- java 多态 成员函数
- 继承、多态——成员变量、成员函数、构造函数(this、super)
- 多态中成员函数以及成员变量的特点总结:
- [疑问]C/C++中为什么在类外利用多态基类指向派生类指针可以调用类的私有成员函数?