现在定义一个基类
type Basic = class(TObject);
有一个方法 procedure p;有三个派生类type De1 = class(TOjcet);
De2...De3...
都有个p过程,实现的功能不一样.然后定义一个var M : array of Basic;
为M[1]定义为De1类型,M[2]定义为De2类型,M[3]定义为De3类型.调用他们的P过程时应该有不同的表现.另外 如何实现父类向子类的转换?M[1] as De1么?麻烦各位前辈指点一下,最好能附上完整的代码.
type Basic = class(TObject);
有一个方法 procedure p;有三个派生类type De1 = class(TOjcet);
De2...De3...
都有个p过程,实现的功能不一样.然后定义一个var M : array of Basic;
为M[1]定义为De1类型,M[2]定义为De2类型,M[3]定义为De3类型.调用他们的P过程时应该有不同的表现.另外 如何实现父类向子类的转换?M[1] as De1么?麻烦各位前辈指点一下,最好能附上完整的代码.
为M[1]定义为De1类型,M[2]定义为De2类型,M[3]定义为De3类型.调用他们的P过程时应该有不同的表现.
------------------------------------------------------
有这样数组吗?
另外 如何实现父类向子类的转换?M[1] as De1么?
-------------------
这样错了
其他方法也可以,只要实现多态都行.麻烦把完整代码列出来~多谢
对于父类向子类转换是怎么转呢?麻烦解答一下
Basic = class(TObject);
procedure p;virtual;abstract;
end;
De1 = class(Basic);
procedure p;override;
end;父类能向子类转换?呵呵 JAVA可以?
子类应该是这样声明:De1 = class(TBasic);
.......
end; De2 = class(TBasic);
.......
end;
var
s: array of TObject;if s[0] is TControl then // 判断s[0]是否是TControl或其子类的实例
begin
TControl(s[0]).Show; // 显示转换
end;有时也会直接使用:
s[0] as TControl
你定义的数据基类是Basic,故使用数据中任一元素调用P方法,都是调用的Basic类中的P方法,而不是对应子类的P方法。
建议在父类中将P方法定义为虚方法,如果不需要实现任何动作,亦可以使用Abstract将其定义为抽象方法。在其子类中使用Override关键字改写此虚方法。
Type
TBasic = class
protected
procedure P; virtual;abstract;
end; TDe1 = class(TBasic)
private
procedure P; override;
end;类型转换可以使用强类型转换方法:
TDe1(M[0]).P;