关于override的问题,我不明白为什么要用override,不用为什么不行?
我在父类里不申明我virtual,然后利用同一个名字也一样可以调用子类里的各个函数实现其功能呀。
我不明白使用override的真正含义,谢谢各位大虾的指点。
还有就是overload的用法了,千万不要说要我看书,谢谢了。
我在父类里不申明我virtual,然后利用同一个名字也一样可以调用子类里的各个函数实现其功能呀。
我不明白使用override的真正含义,谢谢各位大虾的指点。
还有就是overload的用法了,千万不要说要我看书,谢谢了。
解决方案 »
- delphi 动态链接库小问题,请高手及大侠进来小试牛刀...
- 如何判断操作系统中是否同时安装了多个浏览器?
- 求delphi 通用查询模块 200分
- 在sql server 应用系统中,如果其中一台服务器坏了,怎样才能防止数据丢失,并在最短的时间内恢复系统?
- 能否在一个程序中调用另一个应用程序,并使类似一个子窗体?
- 怎样修改窗体(或者Screen)的缺省光标??
- 为什么listview不能输入数据?有什么别的控件类似listview,但是能输入数据。
- ★★★★★★我想在程序里面做一个内嵌的语言分析解释器,★★★★★★让它可以执行我自己定义的语言,★★★★★★★不知道哪位大哥能提
- 一个关于激活table的问题,高手请近!
- 要做一件费时间的事,怎么设置progressbar的初始值和最终值啊?要做的这件事跟数值没关系,我真是想不通该怎么作了。
- 那位大侠有InstallShieldExpress354的password /Serial ???
- 急!急!急!delphi初学者请君救急!!!
你是不是想问为什么要有这条语句,在程序设计中如何使用吗?
好象一般是在设计类时,如果有共同的代码可以放在父类中,然后父类就用
VIRTUAL,子类就可以用OVERRIDE啦。
不过,后来我觉得还是多用VIRTUAL;ABSTRACT;这种纯虚在大多数情况下更好。
我觉得真想明白面向对象的意义只有多看书,多做别人的例子,
再自己多写程序,慢慢就有感觉啦。
我想知道的是,在什么情况下要用OVERRIDE,用他有什么好处,为什么要用?
如果基类里面定义了一个virtual函数,我们在他的子类中override的函数于基类中的同名函数是什么关系,是不是继承了基类的同名函数?我想知道的是这些。谢谢了。分会给的,还会加分的
例:
procedure Print(I:Integer);overload;
procedure Print(S:String);overload;
在调用的时候,程序员只需记住Print过程,而不必关心参数的数据类型,Print(3)和Print('3')都会解析到相应的正确实现。 再说override:用于重载方法。只有在某个祖先类中声明的虚方法(virtual)才能进行重载。重载方法可以增强原来的行为,也可以对其进行彻底的改变——前者中可使用inherited再加入自己的代码。>>>>我在父类里不申明我virtual,然后利用同一个名字也一样可以调用子类里的各个函数实现其功能呀——你这只是屏蔽了祖先类的方法而已。
面向对象的特性中多态的体现就在于虚函数。什么老子不等于儿子,儿子可以等于老子这些,希望你找本书仔细研究。也可能一时半会儿还不清楚,那么去看看Java、C++这样面向对象语言中面向对象的特点交叉学习。
谢谢了,你讲的还是比较详细了。
>>>>我在父类里不申明我virtual,然后利用同一个名字也一样可以调用子类里的各个函数实现其功能呀——你这只是屏蔽了祖先类的方法而已。我屏蔽与不屏蔽祖先类的方法有什么关系呢?反正就算我不屏蔽祖先类的方法,但是我override了,祖先类的方法在子类中仍然没有起作用呀——这就是我真正想知道的呀。谢谢了
TMySubClass=class(TMyClass)
procedure MyMethod(I:integer);
...
end;
{$WARNINGS ON}
或
procedure MyMethod(I:integer);reintroduce;
为了实现这个目的需要在父类的方法声明中加入virtual关键字。
谢谢各位了。
To:to all注意:重载方法可以增强原来的行为,也可以对其进行彻底的改变。增强原来的行为,也可以进行彻底的改变到的是什么意思,这句话我也知道,但就是没有真正理解他的含义呀。特别是说增强原来的行为到底是什么意思,请详细解析一下。
谢谢各位了。
问题你又不告诉我,只要我给分,分我肯定会给你们的拉。:)