(1)虚方法和动态方法一样:
它的结果只和谁创建它有关系,和其它转换没有关系;
(2)静态方法
和它的当前类型有关系
1
类方法
2 type
3 TClassA = class
4 public
5 function AAA(): string ; virtual ; // 虚方法
6 function BBB(): string ; // 静态方法
7 end ;
8
9 TClassB = class (TClassA)
10 public
11 function AAA(): string ; override ; // 重写
12 function BBB(): string ;
13 end ;
14
15
16 implementation
17
18 { TClassA }
19
20 function TClassA.AAA: string ;
21 begin
22 result: = ' TCLassA.AAA ' ;
23 end ;
24
25 function TClassA.BBB: string ;
26 begin
27 result: = ' TClassA.BBB ' ;
28 end ;
29
30 { TClassB }
31
32 function TClassB.AAA: string ;
33 begin
34 result: = ' TClassB.AAA ' ;
35 end ;
36
37 function TClassB.BBB: string ;
38 begin
39 result: = ' TClassB.BBB ' ;
40 end ;
41
42 end .
2 type
3 TClassA = class
4 public
5 function AAA(): string ; virtual ; // 虚方法
6 function BBB(): string ; // 静态方法
7 end ;
8
9 TClassB = class (TClassA)
10 public
11 function AAA(): string ; override ; // 重写
12 function BBB(): string ;
13 end ;
14
15
16 implementation
17
18 { TClassA }
19
20 function TClassA.AAA: string ;
21 begin
22 result: = ' TCLassA.AAA ' ;
23 end ;
24
25 function TClassA.BBB: string ;
26 begin
27 result: = ' TClassA.BBB ' ;
28 end ;
29
30 { TClassB }
31
32 function TClassB.AAA: string ;
33 begin
34 result: = ' TClassB.AAA ' ;
35 end ;
36
37 function TClassB.BBB: string ;
38 begin
39 result: = ' TClassB.BBB ' ;
40 end ;
41
42 end .
方法调用
var
Form1: TForm1;
a:TClassA;
b:TClassB;
implementation
{ $R *.dfm }
procedure TForm1.btn1Click(Sender: TObject);
begin
a: = TClassA.Create;
Self.mmo1.Text: = Self.mmo1.Text + a.AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + a.BBB + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassB(a).AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassB(a).BBB + # 13 # 10 ;
end ;
procedure TForm1.btn2Click(Sender: TObject);
begin
a: = TClassB.Create;
Self.mmo1.Text: = Self.mmo1.Text + a.AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + a.BBB + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassA(a).AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassA(a).BBB + # 13 # 10 ;
end ;
procedure TForm1.btn3Click(Sender: TObject);
begin
b: = TClassB.Create;
Self.mmo1.Text: = Self.mmo1.Text + b.AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + b.BBB + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassA(b).AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassA(b).BBB + # 13 # 10 ;
end ;
end .
var
Form1: TForm1;
a:TClassA;
b:TClassB;
implementation
{ $R *.dfm }
procedure TForm1.btn1Click(Sender: TObject);
begin
a: = TClassA.Create;
Self.mmo1.Text: = Self.mmo1.Text + a.AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + a.BBB + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassB(a).AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassB(a).BBB + # 13 # 10 ;
end ;
procedure TForm1.btn2Click(Sender: TObject);
begin
a: = TClassB.Create;
Self.mmo1.Text: = Self.mmo1.Text + a.AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + a.BBB + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassA(a).AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassA(a).BBB + # 13 # 10 ;
end ;
procedure TForm1.btn3Click(Sender: TObject);
begin
b: = TClassB.Create;
Self.mmo1.Text: = Self.mmo1.Text + b.AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + b.BBB + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassA(b).AAA + # 13 # 10 ;
Self.mmo1.Text: = Self.mmo1.Text + TClassA(b).BBB + # 13 # 10 ;
end ;
end .
执行结果分别为:
1 . TCLassA.AAA
TClassA.BBB
TCLassA.AAA
TClassB.BBB
2 .TClassB.AAA
TClassA.BBB
TClassB.AAA
TClassA.BBB
3 .TClassA.BBB
TClassB.AAA
TClassB.BBB
TClassB.AAA
1 . TCLassA.AAA
TClassA.BBB
TCLassA.AAA
TClassB.BBB
2 .TClassB.AAA
TClassA.BBB
TClassB.AAA
TClassA.BBB
3 .TClassA.BBB
TClassB.AAA
TClassB.BBB
TClassB.AAA