本人對(duì)JAVA有一定的了解,最近開始看一些C++的東西,遇到了JAVA與C++的如下不同點(diǎn):就是JAVA與C++在覆蓋或者是多態(tài)性上不太一樣。
現(xiàn)寫了兩塊代碼證明如下,至于為什么會(huì)有如此原因,我也不明白,希望有能懂C++與JAVA的人能出來(lái)講解一下。
#include <stdio.h>
#include? "iostream.h"
class Base{
?public: void show(){
?cout<<"Base";
?}
};
class ExBase : public Base
{
?public: void show(){
?cout<<"ExBase";
?}
?
?public: void showEnd(){
??cout<<"EndClass";
?}
};
void main(){
?Base? * base= new ExBase();?
?base->show();//打印Base?
?
};
?
//文件一
package test;
public class Base {
?static?? String abc="abc";
?public void show() {
??System.out.print("base");
?}
}
//文件二
package test;
public class ExBase extends Base {
?public void show() {
??System.out.print("TestBase");
?}
}
//文件三
package test;
public class Test {
?public static void main(String[] args) {
??Base base = new ExBase();
??base.show();//打印Base
?}
}
最后運(yùn)行打印出來(lái)的是“TestBase”,也就是子類的函數(shù)起作用了。
按照相同的思路,我寫了如下的C++代碼:
//文件四
#include <stdio.h>
#include? "iostream.h"
class Base{
?public: void show(){
?cout<<"Base";
?}
};
class ExBase : public Base
{
?public: void show(){
?cout<<"ExBase";?
};
void main(){
?Base? * base= new ExBase();?
?base->show();//打印Base?
?
};
結(jié)果起作用的卻是父類的代碼,最后打印出來(lái)的是“Base”
?
他們都是子類覆蓋了父內(nèi)的函數(shù),但是通用時(shí)卻通過(guò)父類來(lái)調(diào)用。為什么類似的結(jié)構(gòu)卻產(chǎn)生了不同的結(jié)果,到底是因?yàn)镃++與JAVA哪方面的不同產(chǎn)生的。