java中:
<a></a>
Parent:5
testone.Child
c++中:
/* static void run(){//這兩種寫法都是正确的
cout<<"Child"<<endl;
}
void run(){
*/
差別:在c++中,重載不會發生在基類與派生類之間!當基類和派生類中存在同名函數時,無論同名函數的形參個數或者類型是否相同,派生類中的同名函數都會将基類中的同名函數隐藏(将在下邊說明隐藏)掉,而不會是重載關系。這時,當你通過派生類對象調用該同名函數時,隻能通路派生類的該函數,如果硬要通路基類的該函數,則需要在函數名前加上類作用域!如上述代碼所示。而在java中子類會将父類中的方法繼承過來,子類中同名方法會和父類中的同名方法要麼是重載關系,要麼是覆寫關系,要麼就錯誤(比如同名同參卻是不同的傳回類型!)
在c++中隐藏隻能出現在基類和派生類之間,而不能發生在同一個類内(否則會引起編譯器出現二義性)。當基類和派生類中存在同名函數時,無論同名函數的形參個數或者類型是否相同,派生類中的同名函數都會将基類中的同名函數(這個函數不論是靜态或者是非靜态都可以,如上述例子)隐藏掉,而不會是重載關系。這時,當你通過派生類對象調用該同名函數時,隻能通路派生類的該函數,如果硬要通路基類的該函數,則需要在函數名前加上類作用域!對于虛函數(用virtual修飾的),如果基類中有一個虛函數,派生類中同樣有一個同名同參的函數(那麼該函數将自動虛化), 那麼其傳回值一定要和基類的虛函數的傳回值相同!否則隐藏失敗!
但是在java中請記住這樣的原則:非靜态方法隻能由(或被)非靜态方法覆寫!靜态方法隻能由(或被)非靜态方法覆寫!抽象方法必須在具體類中被覆寫!最終方法(帶關 鍵字final的方法)不能被覆寫!
本文轉自 小眼兒 部落格園部落格,原文連結:http://www.cnblogs.com/hujunzheng/p/3969166.html,如需轉載請自行聯系原作者