关于使用多态的问题(0分)

  • 主题发起人 wenaideyu
  • 开始时间
W

wenaideyu

Unregistered / Unconfirmed
GUEST, unregistred user!
关于使用多态的问题:
通常我们是使用这样使用多态的:
1,类定义
type
TBaseClass = class
public
procedure a;virtual;
.....
end;
TClass1 = class(TBaseClass)
public
procedure a;override;
....
end;
TClass2 = class(TBaseClass)
public
procedure a;override;
....
end;

2,在程序中
var
c1: TBaseClass;
begin

//子类的指针赋给父类
c1 := TClass2.create;
c1.a;
end;

然后通过把子类的指针赋给父类,这样,当调用父类的方法a时,实际上是调用了
相应子类的方法a;但是这样做有一个问题,这要求我们在设计父类的时候必须考虑仔细,把所有可能的方法都考虑进去,如果不是这样的话,以后,当子类中出现父类所不包含的新方法时,就无法调用,从而利用不了子类的特性,不知道有没有一种比较好的解决方法,能够利用多态的性质,而又不出现上面的问题???
 
D

dcsdcs

Unregistered / Unconfirmed
GUEST, unregistred user!
当然可以!比如有新的方法采用强制转换!
var
c1: TBaseClass;
begin

c1 := TClass2.create;
(c1 as Tclass2).newtest;
end;
多态就是你说的!
 
顶部