面向?qū)ο蠖橄箢?/h2>

抽象方法和抽象類

抽象方法和抽象類必須使用abstract修飾符來定義,有抽象方法的類只能被定義為抽象類,抽象類里可以沒有抽象方法。

抽象方法和抽象類的規(guī)則如下:
(1)抽象類必須使用abstract修飾符來修飾,抽象方法也必須使用abstract修飾符來修飾,抽象方法不能有抽象體。
(2)抽象類不能被實(shí)例化,無法使用new關(guān)鍵字來調(diào)用抽象類的構(gòu)造器創(chuàng)建抽象類的實(shí)例。即使抽象類里不包括抽象方法,這個(gè)抽象類也不能創(chuàng)建實(shí)例。
(3)抽象類可以包含變量、方法(成員、普通變量和方法都行)、構(gòu)造器、初始化塊、內(nèi)部類、枚舉類6中成分。抽象類的構(gòu)造器不能用于創(chuàng)建實(shí)例,主要用于被其子類調(diào)用。
(4)含有抽象方法的類只能被定義為抽象類。包括直接定義了一個(gè)抽象方法;繼承了一個(gè)抽象父類,但沒有完全實(shí)現(xiàn)父類包含的抽象方法,以及實(shí)現(xiàn)了一個(gè)接口,但沒有完全實(shí)現(xiàn)接口包含的抽象方法3種情況。

定義抽象類只需在普通類上增加abstract修飾符即可。甚至一個(gè)普通類(沒有包含抽象方法的類)增加abstract修飾符后也變成了抽象類。


image.png

注意:
(1)final和abstract不能同時(shí)存在。當(dāng)使用abstract修飾類時(shí),表明這個(gè)類只能被繼承,當(dāng)使用abstract修飾方法時(shí),表面這個(gè)方法必須由子類提供實(shí)現(xiàn)(重寫),而final修飾的類不能被繼承,final修飾的方法不能被重寫。
(2)abstract和private不能同時(shí)存在。abstract關(guān)鍵字修飾的方法必須由子類重寫才有作用,因此不能時(shí)使用private訪問權(quán)限。
(3)abstract和static不能同時(shí)修飾某個(gè)方法。當(dāng)使用static修飾一個(gè)方法時(shí),表明這個(gè)方法屬于該類本身。但如果該方法被定義為抽象方法,則將導(dǎo)致通過該類來調(diào)用該方法時(shí)出現(xiàn)錯(cuò)誤(調(diào)用了一個(gè)沒有方法體的方法)。

抽象類的作用

抽象類體現(xiàn)的是一種模版模式的設(shè)計(jì),抽象類作為多個(gè)子類的通用模版,子類在抽象類的基礎(chǔ)上進(jìn)行擴(kuò)展、改造,但子類總體上會(huì)大致保留抽象類的行為方式。


image.png

image.png

模版模式的一些規(guī)則:
(1)抽象父類可以只定義需要使用的某些方法,把不能實(shí)現(xiàn)的部分抽象成抽象方法,留給其子類去實(shí)現(xiàn);
(2)父類中可能包含需要調(diào)用的其他系列方法的方法,這些被調(diào)用方法既可以由父類實(shí)現(xiàn),也可以由其子類實(shí)現(xiàn)。父類里提供的方法只是定義了一個(gè)通用算法,其實(shí)現(xiàn)也許并不完全由自身實(shí)現(xiàn),而必須依賴其子類的輔助。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容