今天听老师问了子类继承父类的部分函数如果只有部分覆盖会怎么样,回来试了一下发现C++和JAVA还不一样,于是记下来吧。
问题就是,如果父类中函数fA()调用了fB(),子类里面覆写了fB(),那么当子类调用fA()的时候,fA()调用的是父类的fB()还是子类的fB();
C++:
#include <iostream>
using namespace std;
class Father {
public :
void fA() {cout << "Father's FA!" << endl; fB();}
void fB() {cout << "Father's FB!" << endl;}
};
class Son : public Father {
public :
void fB() {cout << "Son's FB!" << endl;}
};
int main() {
Son son;
son.fA();
system("pause");
return 0;
}
输出:
Father's FA!
Father's FB!
JAVA:
public class Stu {
public void fA() {
System.out.println("老子的FA");
this.fB();
}
public void fB() {
System.out.println("老子的FB");
}
}
public class peo extends Stu {
public void fB() {
System.out.println("儿子的FB");
}
}
public class main {
public static void main(String[] args) {
peo m = new peo();
m.fA();
}
}
输出:
老子的FA
儿子的FB
由此可以看出C++和JAVA的多态机制很明显不一样。
C++里子类的覆写不会影响到父类的调用;而JAVA会。
我查阅资料和搜索的结果也是这样说明的,当C++里希望子类覆写改变父类调用的时候,应该在父类函数声明virtual。
详情参考【转】 http://www.ibm.com/developerworks/cn/java/j-lo-polymorph/