虚函数与抽象函数的区别
我学面向对象也不久了,但对一些基本概念还是有许多理解不到位。最近看了一些
Delphi
的书,整天看到什么
virtual,
与
abstract,
我才真的弄明白了其中的差别:
虚函数是与多态
(
确切的说是运行时多态
)
密不可分的,虚函数就是为多态服务的,如果没有多态,虚函数就失去了它的价值。而抽象函数是没有具体实现的函数。表面上很好理解,但到了具体语言就不好理解了:
比如,在
C++
中,抽象函数(也就是纯虚函数)是这样定义的
virtual returnType method()=0,
所以抽象函数就是虚函数(因为声明为
virtual
)。而在
java
中任何函数都是虚函数(所以就不存在违反里氏代换原则的可能)所以我们看不到
virtual
这个关键字。而抽象函数是声明为
abstract
的也是没有具体实现的虚函数。而在
Delphi
里面就有两个关键字,
virtual
和
abstract.
分别声明为虚函数和抽象函数。这抽象方法就不再是虚方法了
.
但是不管怎样
,
两者都意味着方法重写
(override).
也就是说
,
在父类
(
超类
)
中声明为虚或抽象的方法就是在教你在子类
(
派生类
)
中重写
(
重新定义
,override)
它
.
。而我们常说的方法重载(
overload
)是在同一个类中进行的,也就是实现静态
(
编译期
)
多态性
.