??? 虛函數(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)性
.
只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||