在delphi中抽象方法有什么用?在后代中直接实现其方法不行吗? 在delphi中抽象方法有什么用?在后代中直接实现其方法不行吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 例如:对于下面3个类,TShape的Paint是纯虚的,没有实现。TShape=class function: Paint: Boolean; virtual; abstract;end;TRectangle=class(TShape) function: Paint: Boolean; override;end;TCircle=class(TShape) function: Paint: boolean; overrdie;end;可以有这样的函数:procedure PaintAShape(shape: TShape);begin shape.Paint;end;则你可以这样调用:var t:TRectangle; t1: TCircle;begin t := TRectangle.Create; t1 := TCircle.Create; PaintAShape(t); PaintAShape(t1);end;体会一下其中的乐趣吧,哈哈,没有那个纯虚的Paint,PaintAShape函数怎么可以直接shape.Paint;,:)有意思吧! To zwjchina(蒲石) 再举个例子好吗? 有一点你要注意,就是类的私有方法可以被子类重载后增加可见性,也就是子类中可以让原来是私有的方法变成protected,或者public的。我现在说得更抽象一点TClassA=classprivate procedure DoA; virtual; abstract; procedure DoB; virtual; abstract; procedure DoC;public procedure DoThing;end;procedure TClassA.DoThing;begin DoA; DoB; DoC;end;TClassB = class(TClassA)private procedure DoA; virtual; override; procedure DoB; virtual; override;end;这里就要说得抽象一点了,对于TClassA的Dothing 它负责做一件事情,其中DoA,DoB, DoC分别是完成这件事情的3个步骤,但是可能有这种情况:DoA,DoB根据具体子类不同,其完成方式也不同。那么这个时候就需要子类重载这2个函数,不过,有一点我要说的是,重载后他的表现不是通过调用DoA,或者DoB实现的,而是,你在调用TClassB的对象实例的DoThing时表现出不同行为的,你可以看出有了这种处理方式,程序员要写的重复代码大大减少了,同时也增加了你的对象的扩展性。 Delphi怎样实现将一幅小位图粘贴到另一幅大位图上去? 用过reportmachine的请进,郁闷问题搞得头大了 大家开发过这样的矢量系统吗?请给我指点!或者给点学习这方面知识的资料! 最后10分,问个弱智问题 打印机问题 救命啊 关于导出到.txt时的自动分出固定长度的列的问题!!!请帮忙!! 这段存储过程如果放在前台用内嵌的SQL语句写该怎么写? 怎样设置才能令form只有“最小化”和“关闭”? 各位专家哥哥,帮个忙,这个SQL语句为什么不反回结果?? 求得文件的日期 初学者的苦恼!
TShape=class
function: Paint: Boolean; virtual; abstract;
end;TRectangle=class(TShape)
function: Paint: Boolean; override;
end;TCircle=class(TShape)
function: Paint: boolean; overrdie;
end;可以有这样的函数:
procedure PaintAShape(shape: TShape);
begin
shape.Paint;
end;
则你可以这样调用:
var
t:TRectangle;
t1: TCircle;
begin
t := TRectangle.Create;
t1 := TCircle.Create;
PaintAShape(t);
PaintAShape(t1);
end;
体会一下其中的乐趣吧,哈哈,没有那个纯虚的Paint,PaintAShape函数怎么可以
直接shape.Paint;,:)有意思吧!
再举个例子好吗?
有一点你要注意,就是类的私有方法可以被子类重载后
增加可见性,也就是子类中可以让原来是私有的方法变成
protected,或者public的。
我现在说得更抽象一点
TClassA=class
private
procedure DoA; virtual; abstract;
procedure DoB; virtual; abstract;
procedure DoC;
public
procedure DoThing;
end;procedure TClassA.DoThing;
begin
DoA;
DoB;
DoC;
end;TClassB = class(TClassA)
private
procedure DoA; virtual; override;
procedure DoB; virtual; override;
end;这里就要说得抽象一点了,对于TClassA的Dothing 它负责做一件事情,其中
DoA,DoB, DoC分别是完成这件事情的3个步骤,但是可能有这种情况:DoA,DoB
根据具体子类不同,其完成方式也不同。那么这个时候就需要子类重载这2个函数
,不过,有一点我要说的是,重载后他的表现不是通过调用DoA,或者DoB实现的,
而是,你在调用TClassB的对象实例的DoThing时表现出不同行为的,你可以看出
有了这种处理方式,程序员要写的重复代码大大减少了,同时也增加了你的对象
的扩展性。