C#、C++、JAVA中虛函數和抽…
原文地址:C#、C++、JAVA中虛函數和抽象函數的概念對比作者:北風呼嘯
1、C++中函數被定義爲虛函數的方法是在函數名前加virtual,虛函數可以有自己的具體內容,也可以不含有函數實現內容,稱爲純虛函數。這裏未指明爲純虛函數的函數均默認爲非純虛函數。純虛函數的表示形式爲virtual
int
getNum()=0;後面加"==0"表示函數無實現內容。含有虛函數的類可以實例化,可當作普通類來使用,但含有純虛函數的類只能被繼承後才能使用,且子類中必須實現父類的純虛函數,這種情況下父類稱爲抽象類。
2、java中沒有虛函數的概念,普通函數就相當於C++中的虛函數,不過可以在函數前加final使函數不能被重寫。java中的含有抽象函數,相當於C++中的純虛函數,java的抽象函數只能在抽象類中定義。java的抽象類不能被實例化,抽象類的子類必須實現全部抽象函數。可見java和C++中,虛函數的相關概念本質上是一致的。
3、C#整合了java和C++,對虛函數有了更明細的劃分。定義了虛函數和抽象函數。虛函數定義時,在函數前加virtual,函數必須有實現,在子類中可以重寫也可以不重寫虛函數,重寫虛函數時應在重寫的函數前加override關鍵字。抽象函數不能含有函數實現,類似於接口,在繼承的子類中必須重寫該函數。另外,抽象函數只能定義在抽象類中,在普通類中定義抽象函數會報錯。
可簡單對比理解如下:
C++:
虛函數
純虛函數
java: 普通函數
抽象函數
C#:
虛函數
抽象函數
三種語言相對應的概念是基本一致的。java普通函數就可以被子類重寫,而C++、C#中只有虛函數、純虛函數或抽象函數可以被子類重寫;java的純虛函數及C++、C#的抽象函數對應的類都是抽象類,且抽象類均不能實例化,只能被子類繼承。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.