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

          我學面向對象也不久了,但對一些基本概念還是有許多理解不到位。最近看了一些 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)  編輯  收藏

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


          網站導航:
           
           
          主站蜘蛛池模板: 青海省| 介休市| 贺兰县| 小金县| 镇赉县| 锦屏县| 普兰店市| 祁东县| 甘谷县| 杂多县| 奇台县| 辽阳市| 固阳县| 杭锦后旗| 昆山市| 高阳县| 彰化县| 温宿县| 屏山县| 县级市| 灌阳县| 临海市| 中超| 枣庄市| 门头沟区| 高雄市| 景德镇市| 明星| 永春县| 封开县| 临城县| 江西省| 南溪县| 麻江县| 阿拉尔市| 循化| 靖江市| 长垣县| 百色市| 平乐县| 武城县|