天天看點

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++中一般抽象類和純虛類的差別。

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