??? 虛函數與抽象函數的區別

          我學面向對象也不久了,但對一些基本概念還是有許多理解不到位。最近看了一些 Delphi 的書,整天看到什么 virtual, abstract, 我才真的弄明白了其中的差別:

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

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

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

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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          主站蜘蛛池模板: 黔南| 资阳市| 射阳县| 青浦区| 顺义区| 崇阳县| 金沙县| 潼南县| 微山县| 蓝山县| 常德市| 霍山县| 民和| 昂仁县| 微山县| 柯坪县| 邹城市| 射洪县| 洪泽县| 米脂县| 交城县| 越西县| 安福县| 益阳市| 师宗县| 禄劝| 嘉义县| 罗源县| 嵊泗县| 封开县| 黄冈市| 延长县| 丰都县| 临澧县| 永吉县| 内丘县| 潞西市| 福州市| 涿州市| 会昌县| 阿勒泰市|