虚函数与抽象函数的区别

我学面向对象也不久了,但对一些基本概念还是有许多理解不到位。最近看了一些 Delphi 的书,整天看到什么 virtual, abstract, 我才真的弄明白了其中的差别:

虚函数是与多态 ( 确切的说是运行时多态 ) 密不可分的,虚函数就是为多态服务的,如果没有多态,虚函数就失去了它的价值。而抽象函数是没有具体实现的函数。表面上很好理解,但到了具体语言就不好理解了:

比如,在 C++ 中,抽象函数(也就是纯虚函数)是这样定义的 virtual returnType method()=0, 所以抽象函数就是虚函数(因为声明为 virtual )。而在 java 中任何函数都是虚函数(所以就不存在违反里氏代换原则的可能)所以我们看不到 virtual 这个关键字。而抽象函数是声明为 abstract 的也是没有具体实现的虚函数。而在 Delphi 里面就有两个关键字, virtual abstract. 分别声明为虚函数和抽象函数。这抽象方法就不再是虚方法 .

但是不管怎样 , 两者都意味着方法重写 (override). 也就是说 , 在父类 ( 超类 ) 中声明为虚或抽象的方法就是在教你在子类 ( 派生类 ) 中重写 ( 重新定义 ,override) . 。而我们常说的方法重载( overload )是在同一个类中进行的,也就是实现静态 ( 编译期 ) 多态性 .

posted on 2006-06-11 18:16 pear 阅读(2347) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: