C#、C++、JAVA中虚函数和抽象函数的概念对比
這兩天惡補了下C#的相關(guān)內(nèi)容,虛函數(shù)的概念又挖掘了下,總結(jié)如下:
1、C++中函數(shù)被定義為虛函數(shù)的方法是在函數(shù)名前加virtual,虛函數(shù)可以有自己的具體內(nèi)容,也可以不含有函數(shù)實現(xiàn)內(nèi)容,稱為純虛函數(shù)。這里未指明為純虛函數(shù)的函數(shù)均默認為非純虛函數(shù)。純虛函數(shù)的表示形式為virtual int getNum()=0;后面加"==0"表示函數(shù)無實現(xiàn)內(nèi)容。含有虛函數(shù)的類可以實例化,可當(dāng)作普通類來使用,但含有純虛函數(shù)的類只能被繼承后才能使用,且子類中必須實現(xiàn)父類的純虛函數(shù),這種情況下父類稱為抽象類。
2、java中沒有虛函數(shù)的概念,普通函數(shù)就相當(dāng)于C++中的虛函數(shù),不過可以在函數(shù)前加final使函數(shù)不能被重寫。java中的含有抽象函數(shù),相當(dāng)于C++中的純虛函數(shù),java的抽象函數(shù)只能在抽象類中定義。java的抽象類不能被實例化,抽象類的子類必須實現(xiàn)全部抽象函數(shù)。可見java和C++中,虛函數(shù)的相關(guān)概念本質(zhì)上是一致的。
3、C#整合了java和C++,對虛函數(shù)有了更明細的劃分。定義了虛函數(shù)和抽象函數(shù)。虛函數(shù)定義時,在函數(shù)前加virtual,函數(shù)必須有實現(xiàn),在子類中可以重寫也可以不重寫虛函數(shù),重寫虛函數(shù)時應(yīng)在重寫的函數(shù)前加override關(guān)鍵字。抽象函數(shù)不能含有函數(shù)實現(xiàn),類似于接口,在繼承的子類中必須重寫該函數(shù)。另外,抽象函數(shù)只能定義在抽象類中,在普通類中定義抽象函數(shù)會報錯。
可簡單對比理解如下:
C++: 虛函數(shù) 純虛函數(shù)
java: 普通函數(shù) 抽象函數(shù)
C#: 虛函數(shù) 抽象函數(shù)
三種語言相對應(yīng)的概念是基本一致的。java普通函數(shù)就可以被子類重寫,而C++、C#中只有虛函數(shù)、純虛函數(shù)或抽象函數(shù)可以被子類重寫;java的純虛函數(shù)及C++、C#的抽象函數(shù)對應(yīng)的類都是抽象類,且抽象類均不能實例化,只能被子類繼承。
資料來源:https://zhuanlan.zhihu.com/p/36421120
總結(jié)
以上是生活随笔為你收集整理的C#、C++、JAVA中虚函数和抽象函数的概念对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#和c++中枚举类型的区别(简)
- 下一篇: C#socket之TCP开发详解(一)