使用多态的问题(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;但是这样做有一个问题,这要求我们在设计父类的时候必须考虑仔细,把所有可能的方法都考虑进去,如果不是这样的话,以后,当子类中出现父类所不包含的新方法时,就无法调用,从而利用不了子类的特性,不知道有没有一种比较好的解决方法,能够利用多态的性质,而又不出现上面的问题???
 
var
c1: TBaseClass;
begin

//子类的指针赋给父类
c1 := TClass2.create;
c1.a;
end;
 
我觉得首先子类是属于父类的,是IS-A的关系,因此他们具有相同的性质,多态是他们表现这些性质的不同,如果子类有特性,那么这并不是多态,是子类有属于别的类型(可能子类实现了另外的接口)。
学无止境,希望大家都能说说自己的想法
 
后退
顶部