??? 虛函數(shù)與抽象函數(shù)的區(qū)別

          我學(xué)面向?qū)ο笠膊痪昧耍珜?duì)一些基本概念還是有許多理解不到位。最近看了一些 Delphi 的書,整天看到什么 virtual, abstract, 我才真的弄明白了其中的差別:

          虛函數(shù)是與多態(tài) ( 確切的說是運(yùn)行時(shí)多態(tài) ) 密不可分的,虛函數(shù)就是為多態(tài)服務(wù)的,如果沒有多態(tài),虛函數(shù)就失去了它的價(jià)值。而抽象函數(shù)是沒有具體實(shí)現(xiàn)的函數(shù)。表面上很好理解,但到了具體語言就不好理解了:

          比如,在 C++ 中,抽象函數(shù)(也就是純虛函數(shù))是這樣定義的 virtual returnType method()=0, 所以抽象函數(shù)就是虛函數(shù)(因?yàn)槁暶鳛?/span> virtual )。而在 java 中任何函數(shù)都是虛函數(shù)(所以就不存在違反里氏代換原則的可能)所以我們看不到 virtual 這個(gè)關(guān)鍵字。而抽象函數(shù)是聲明為 abstract 的也是沒有具體實(shí)現(xiàn)的虛函數(shù)。而在 Delphi 里面就有兩個(gè)關(guān)鍵字, virtual abstract. 分別聲明為虛函數(shù)和抽象函數(shù)。這抽象方法就不再是虛方法 .

          但是不管怎樣 , 兩者都意味著方法重寫 (override). 也就是說 , 在父類 ( 超類 ) 中聲明為虛或抽象的方法就是在教你在子類 ( 派生類 ) 中重寫 ( 重新定義 ,override) . 。而我們常說的方法重載( overload )是在同一個(gè)類中進(jìn)行的,也就是實(shí)現(xiàn)靜態(tài) ( 編譯期 ) 多態(tài)性 .

          posted on 2006-06-11 18:16 pear 閱讀(2363) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
           
          主站蜘蛛池模板: 灵丘县| 鄯善县| 曲阳县| 蒲城县| 庄河市| 玉门市| 崇阳县| 澜沧| 阳山县| 拜泉县| 台江县| 苏尼特右旗| 色达县| 临武县| 西华县| 连州市| 开远市| 阿尔山市| 铜梁县| 宝鸡市| 安国市| 喀什市| 天水市| 屏东县| 定西市| 英吉沙县| 伊宁县| 榆社县| 武隆县| 万年县| 历史| 麻城市| 曲阳县| 普陀区| 雅江县| 永春县| 都兰县| 尚义县| 綦江县| 通辽市| 绥化市|