Java和C++构造函数调用其它函数
2016-08-11 17:28
330 查看
Java和C++构造函数调用其它函数
这些天一直在写老师布置的Java作业,其中有一道面试题引起了我的注意,内容如下:class Father{ Father(){ Print(); } void Print(){ System.out.println("I am Father."); } } class Son extends Father{ Son(){ Print(); } void Print(){ System.out.println("I am Son."); } } class MainClass{ public static void main(String[] args){ Father father = new Son(); } }
这很简单嘛!我想着,于是填了
I am Father.
I am Son.
抱着必胜的态度,把代码敲进去跑了一下。输出的结果让我懵了。居然两句都是I am Son!不可能啊,于是把类似的代码敲进C++里跑了跑:
class father { public: father() { print(); } virtual void print() { cout << "I am Father." << endl; } }; class son :public father { public: son() { print(); } void print() { cout << "I am Son." << endl; } }; int main() { father *father = new son; }
结果不出我所料:
I am Father.
I am Son.
我仿佛遇到了很高大上的东西。C++父类构造函数调用类内部函数时,选择的是父类自己的函数,即使该函数已经被重写。Java父类构造函数调用类内部函数时,只要该函数被重写,就会转而调用子类的函数。经过一番查阅资料发现,C++在构造函数运行期间是没有完成虚函数表的配置的,而C++的多态性依赖于虚函数表。这也就意味着,在构造函数运行期间,父类是不具备多态性的。反观Java,父类构造函数运行前初始化就做的妥妥的,一出生就拥有了多态性。
从个人角度来说,我还是比较喜欢C++的机制,比较自然。父类就该用父类自己的嘛。自己动手,丰衣足食,嘿嘿~
P.S.这是我第一次写文章,有点小紧张啊,希望能帮助到大家,高手就略过吧,如有错误,求轻喷。
相关文章推荐
- Java和C++构造函数中调用虚函数的区别
- C++中构造函数能调用虚函数吗?(答案是语法可以,输出错误),但Java里居然可以
- Java与C++在构造函数中调用虚函数时的区别
- 构造函数中调用虚函数---C++
- eclipse JNI示例。利用C/C++实现JAVA中调用的函数
- C++中构造函数和析构函数避免调用虚函数的问题
- C++构造函数调用虚函数的问题
- C++继承中构造函数、析构函数调用顺序及虚函数的动态绑定
- 【C++&Java】构造函数的调用点
- JNI的学习(C++调用Java函数)
- C++中构造函数和析构函数避免调用虚函数的问题
- C++中构造函数调用其他函数
- C++继承中构造函数、析构函数调用顺序及虚函数的动态绑定
- C++中构造函数能调用虚函数吗?
- 摘:C++中构造函数和析构函数避免调用虚函数的问题
- C++和java中构造函数与析构函数的调用顺序
- C++中构造函数中调用虚函数的问题
- java调用dll.C++调用没有lib的dll中类中的函数.
- 构造函数中调用虚函数---C++
- java 构造函数 成员函数初始化顺序 以及多态的构造函数的调用顺序