更新時(shí)間:2020-10-26 17:43:11 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2121次
學(xué)習(xí)java的時(shí)候,相信大家都碰到過(guò)純虛函數(shù)和抽象類(lèi)的內(nèi)容,屬于java基礎(chǔ)范圍內(nèi)的知識(shí),這兩者的關(guān)系是需要大家知道的,因此這篇文章來(lái)說(shuō)一說(shuō)純虛函數(shù)和抽象類(lèi)關(guān)系,對(duì)這方面有疑惑的朋友們可以來(lái)學(xué)習(xí)下面的內(nèi)容。

在純虛函數(shù)和抽象類(lèi)關(guān)系的問(wèn)題前,我們先來(lái)認(rèn)識(shí)純虛函數(shù)和抽象類(lèi)是什么:
有時(shí)在基類(lèi)中將某一成員函數(shù)定為虛函數(shù),并不是基類(lèi)本身的要求,而是考慮到派生類(lèi)的需要,在基類(lèi)中預(yù)留了一個(gè)函數(shù)名,具體功能留給派生類(lèi)根據(jù)需要去定義。純虛函數(shù)是在聲明虛函數(shù)時(shí)被“初始化”為0的函數(shù)。聲明純虛函數(shù)的一般形式是:virtual 函數(shù)類(lèi)型 函數(shù)名 (參數(shù)表列) = 0;關(guān)于純虛函數(shù)需要注意的幾點(diǎn):(1)純虛函數(shù)沒(méi)有函數(shù)體;(2)最后面的“=0”并不表示函數(shù)返回值為0,它只起形式上的作用,告訴編譯系統(tǒng)“這是純虛函數(shù)”;(3)這是一個(gè)聲明語(yǔ)句,最后應(yīng)有分號(hào)。純虛函數(shù)只有函數(shù)的名字而不具備函數(shù)的功能,不能被調(diào)用。它只是通知編譯系統(tǒng):“在這里聲明一個(gè)虛函數(shù),留待派生類(lèi)中定義”。在派生類(lèi)中對(duì)此函數(shù)提供定義后,它才能具備函數(shù)的功能,可被調(diào)用。
再來(lái)談抽象類(lèi):如果聲明了一個(gè)類(lèi),一般可以用它定義對(duì)象。但是在面向?qū)ο蟪绦蛟O(shè)計(jì)中,往往有一些類(lèi),它們不用來(lái)生成對(duì)象。定義這些類(lèi)的惟一目的是用它作為基類(lèi)去建立派生類(lèi)。它們作為一種基本類(lèi)型提供給用戶,用戶在這個(gè)基礎(chǔ)上根據(jù)自己的需要定義出功能各異的派生類(lèi)。用這些派生類(lèi)去建立對(duì)象。

純虛函數(shù)的作用是在基類(lèi)中為其派生類(lèi)保留一個(gè)函數(shù)的名字,以便派生類(lèi)根據(jù)需要對(duì)它進(jìn)行定義。抽象類(lèi)的作用是作為一個(gè)類(lèi)族的共同基類(lèi),或者說(shuō),為一個(gè)類(lèi)族提供一個(gè)公共接口。一個(gè)類(lèi)層次結(jié)構(gòu)中當(dāng)然也可不包含任何抽象類(lèi),每一層次的類(lèi)都是實(shí)際可用的,可以用來(lái)建立對(duì)象的。
純虛函數(shù)的作用是在基類(lèi)中為其派生類(lèi)保留一個(gè)函數(shù)的名字,以便派生類(lèi)根據(jù)需要對(duì)它進(jìn)行定義。
如果在基類(lèi)中沒(méi)有保留函數(shù)名字,則無(wú)法實(shí)現(xiàn)多態(tài)性。如果在一個(gè)類(lèi)中聲明了純虛函數(shù),而在其派生類(lèi)中沒(méi)有對(duì)該函數(shù)定義,則該虛函數(shù)在派生類(lèi)中仍然為純虛函數(shù)。如果在基類(lèi)聲明了虛函數(shù),則在派生類(lèi)中凡是與該函數(shù)有相同的函數(shù)名、函數(shù)類(lèi)型、參數(shù)個(gè)數(shù)和類(lèi)型的函數(shù),均為虛函數(shù)(不論在派生類(lèi)中是否用virtual聲明)。
使用虛函數(shù)提高了程序的可擴(kuò)充性,把類(lèi)的聲明與類(lèi)的使用分離,這對(duì)于設(shè)計(jì)類(lèi)庫(kù)的軟件開(kāi)發(fā)商來(lái)說(shuō)尤為重要。以上就是對(duì)純虛函數(shù)和抽象類(lèi)關(guān)系的詳細(xì)介紹,如果看完以上的內(nèi)容,對(duì)純虛函數(shù)和抽象類(lèi)關(guān)系還有疑惑,可以在java教程中找到答案。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)