Posted on 2006-11-16 20:28
itspy 閱讀(1609)
評論(6) 編輯 收藏 所屬分類:
JAVA技術
本人對JAVA有一定的了解,最近開始看一些C++的東西,遇到了JAVA與C++的如下不同點:就是JAVA與C++在覆蓋或者是多態性上不太一樣。
現寫了兩塊代碼證明如下,至于為什么會有如此原因,我也不明白,希望有能懂C++與JAVA的人能出來講解一下。
#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
?}
}
最后運行打印出來的是“TestBase”,也就是子類的函數起作用了。
按照相同的思路,我寫了如下的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?
?
};
結果起作用的卻是父類的代碼,最后打印出來的是“Base”
?
他們都是子類覆蓋了父內的函數,但是通用時卻通過父類來調用。為什么類似的結構卻產生了不同的結果,到底是因為C++與JAVA哪方面的不同產生的。