C++与Java的多态性实现
多态是面向对象语言一个非常重要的特征,在实际软件开发中也占有重要地位,然而它的实现方式很容易被忽略,甚至有时候一个很普通的重载,会被我们当成多态。
C++的多态性
《The C++ Programming Language》这本书提到,C++的多态性只能通过virtual关键字实现。也就是说,如果不在父类中声明某个函数是virtual的,那么当父类的指针或引用指向子类的对象,再通过其调用被子类重写了的函数时,会调用父类的函数。下面有一个例子。
上述例子的运行结果为
而当我们在A中的print函数前添加了virtual关键字后,其运行结果则为下图所示
Java的多态性
与C++不同的是,Java默认的就是建立类似于C++的虚函数表来查找函数,因此,Java的多态性是不需要添加任何关键字说明的。下面有个简单的例子。
以上程序的运行结果为