C++虛函數virtual,純虛函數pure virtual和Java抽象函數abstract,接口interface與抽象類abstract class的比較


 

由於C++和Java都是面向對象的編程語言,它們的多態性就分別靠虛函數和抽象函數來實現。

C++的虛函數可以在子類中重寫,調用是根據實際的對象來判別的,而不是通過指針類型(普通函數的調用是根據當前指針類型來判斷的)。純虛函數是一種在父函數中只定義而不實現的一種函數,不能用來聲明對象,也可以被稱為抽象類。純虛函數的實現也可以在類聲明外進行定義。C++中的抽象類abstract class是指至少有一個純虛函數的類,如果一個類全部由純虛函數組成,不包括任何的實現,被稱為純虛類。

Java中的普通函數自帶虛函數功能,調用是根據指針所指向的對象的類型進行判斷的。Java中沒有virtual這個關鍵字,java管虛函數叫abstract function,管抽象類叫做abstract class,沒有pure這個概念,而是發明了一種叫接口interface的東西來代替純虛類。interface和abstract class的區別就類似於C++中一般抽象類和純虛類的區別。

抽象類只能作為基類來使用,不能被定義對象,其純虛函數的實現在派生類中,如果派生類也沒有給出實現,則該派生類還是一個抽象類,只有給出了純虛函數實現的派生類才能建立對象。由此看出抽象類是注孤生的節奏啊,永遠沒有對象。

其他方面的比較請參見這篇博客C++虛函數與JAVA中抽象函數比較 接口與抽象類比較

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM