Java与C++在多态方面的对比

来源:互联网 发布:国产服装品牌 知乎 编辑:程序博客网 时间:2024/06/05 18:36

虽然不宜在构造函数中调用虚函数(动态绑定的函数),但如果调用了会发生什么呢?这是用Java和C++分别写的两个功能类似的小程序,结果却是不太一样,说明不同语言其实对多态的解释是不一样的。

C++版及运行结果

/*Base()Base.f()Sub()Sub.f() */

#include <iostream>using namespace std;class Base{public: Base(){  cout << "Base()"<<endl;  this->f(); } virtual ~Base(){   } virtual void f(){  cout << "Base.f()" <<endl; }};class Sub:public Base{public: Sub(){  cout << "Sub()"<<endl; } ~Sub(){   } void f(){  cout << "Sub.f()" <<endl; }};int main(int argc,char * argv[]){ Sub s; Base & b = s; b.f(); return 0;} 

 

Java版及运行结果

 

/*运行结果Base()Sub().f()Sub()Sub().f()*/

 

package cn.edu.fjnu;

public class Base { public Base(){  System.out.println("Base()");  this.f(); } public void f(){  System.out.println("Base().f()"); }}

class Sub extends Base{ public Sub(){  System.out.println("Sub()"); } public void f(){  System.out.println("Sub().f()"); } }class Test{ public static void main(String [] args){  Base b = new Sub();  b.f(); }}

原创粉丝点击