【90%的正規(guī)代碼】在以后所有你進(jìn)行的項(xiàng)目開發(fā)過程之中,絕對(duì)不要出現(xiàn)一個(gè)類去繼承一個(gè)已經(jīng)實(shí)現(xiàn)好的類晾蜘,而只能夠繼承抽象類和接口镇眷。
對(duì)象多態(tài)性的核心本質(zhì)在于方法的覆寫上,那么如果說現(xiàn)在子類沒有去進(jìn)行指定方法的覆寫邮辽,這樣的操作就有些不合要求了。所以如果要對(duì)子類的方法進(jìn)行一些強(qiáng)制的要求就必須采用抽象類來解決贸营。
一. 抽象類基本概念
抽象類只是在普通類的基礎(chǔ)上擴(kuò)充了一些抽象方法而已吨述。所謂的抽象方法指的是只是聲明而未實(shí)現(xiàn)(沒有方法體)的方法,所有的抽象方法要求使用abstract關(guān)鍵字來進(jìn)行定義钞脂,并且抽象方法所在的類也一定要使用abstract定義類揣云,表示抽象類。?
現(xiàn)在可以發(fā)現(xiàn)抽象類就是比普通類多了一些抽象方法而已冰啃。
抽象類中包含抽象方法邓夕,而抽象方法與普通方法的最大區(qū)別在于其沒有方法體,即:不知道具體的實(shí)現(xiàn)阎毅,而如果現(xiàn)在產(chǎn)生了實(shí)例化對(duì)象焚刚,則意味著可以調(diào)用類中的所有操作。
對(duì)于抽象類的使用原則:
●所有的抽象類必須要有子類扇调;
●抽象類的子類(不是抽象類)必須覆寫抽象類中的全部抽象方法矿咕;
? ? ? ? |- 方法覆寫一定要考慮到權(quán)限問題:抽象方法可以使用任意權(quán)限,要求權(quán)限盡量都用public狼钮;
●抽象類的對(duì)象可以通過對(duì)象多態(tài)性碳柱,利用子類為其實(shí)例化。
二. 抽象類使用限制
1. 抽象類只是比普通類多了一些抽象方法的定義而已熬芜,所以在抽象類之中依然允許提供有構(gòu)造方法莲镣,并且子類也會(huì)遵守對(duì)象的實(shí)例化流程。實(shí)例化子類對(duì)象前一定要先去調(diào)用父類的構(gòu)造方法涎拉。
對(duì)象的實(shí)例化操作實(shí)際上需要以下幾個(gè)核心步驟:
①進(jìn)行類的加載瑞侮;
②進(jìn)行類對(duì)象空間的開辟的圆;
③進(jìn)行類對(duì)象中屬性的初始化(構(gòu)造方法)。
結(jié)論:如果構(gòu)造方法沒有執(zhí)行区岗,那么對(duì)象中的屬性一定都是其對(duì)應(yīng)數(shù)據(jù)類型的默認(rèn)值略板。
2. 抽象類中允許不定義任何的抽象方法毁枯,但是此時(shí)抽象類對(duì)象依然無法進(jìn)行實(shí)例化處理慈缔。
3. 抽象類一定不能夠使用final進(jìn)行聲明,因?yàn)槭褂胒inal定義的類不能夠有子類种玛,而抽象類必須有子類藐鹤。抽象方法不能夠使用private進(jìn)行定義,因?yàn)槌橄蠓椒ū仨毐桓矊憽?/p>
4. 抽象類也分為內(nèi)部抽象類和外部抽象類赂韵,內(nèi)部抽象類中可以使用static定義娱节,描述為外部抽象類。?
如果外部抽象類使用了static那么就是語法錯(cuò)誤祭示,可內(nèi)部抽象類允許使用static肄满。
三. 模板設(shè)計(jì)模式
抽象類的最大特點(diǎn)在于強(qiáng)制規(guī)定了子類的實(shí)現(xiàn)結(jié)構(gòu),除了這一特點(diǎn)之外质涛,抽象類更多的情況下還可以起到一個(gè)模板的作用稠歉。
抽象類在實(shí)際的使用過程之中會(huì)定義一些固化的模式。
但是每種指令的具體實(shí)現(xiàn)由子類負(fù)責(zé)完成汇陆,父類只做了方法的約定怒炸。
最具代表性的就是后面要學(xué)習(xí)的servlet。
注意:
1. 抽象類雖然定義了子類必須要做的事情毡代,但是抽象類依然會(huì)存在有單繼承局限阅羹。
2. 抽象類的使用必須要通過子類進(jìn)行對(duì)象實(shí)例化的處理。