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