在OOP编程语言中,多态是很重要的OOP思想。而多态的语法支持离不开虚函数。每次都把什么虚函数,抽象类搞混,这次好好整理下!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在Java中没有虚函数的概念,函数默认即为虚函数,动态绑定是Java的默认行为,在Java语法中如果不希望函数具有虚函数特性,可使用final关键字变成非虚函数。
Java中有抽象函数概念,使用abstract定义,这个概念和C++中的纯虚函数的定义很类似。
Java中,抽象函数只有定义而没有实现,它的实现由子类提供,一个包含抽象函数的类必须声明为抽象类。
而Java中的接口只包含常量和抽象方法,接口其实和C++中的纯虚基类类似。Java中的接口是为了实现多重继承的。Java中接口和抽象类不能实例化。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
C++中普通函数继承后可以重写,但是想要支持多态,必须为虚函数或纯虚函数。虚函数只要在函数声明前加 virtual 关键字即可,虚函数有实现,而纯虚函数声明为 virtual void funtion()=0
C++中,类中只要存在纯虚函数即为抽象类,不能实例化,但C++中无需将类声明为abstract。
C++中,没有接口的定义,但可以将纯虚基类理解为一种接口。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
C# 中语法像是C++和Java的结合体,C#中函数必须声明为虚函数(可有实现)或抽象函数(不能有实现),才可以在子类中Override。
其中C#中抽象类可以包含抽象方法和非抽象方法,和其他语言类似的,抽象类不能实例化。
C#中接口中不能为成员方法实现方法,只能在实现接口的类中去实现,而且必须全部实现,这个语法与Java中接口类似。