Java現(xiàn)在作為IT開(kāi)發(fā)的主力開(kāi)發(fā)語(yǔ)言,在編程界的地位是可想而知的了。繼承作為面對(duì)象的三大特征之一,其也是java學(xué)習(xí)的重要性。繼承這個(gè)知識(shí)點(diǎn)對(duì)于想要學(xué)習(xí)java的學(xué)員來(lái)說(shuō)也是比較難的,今天達(dá)內(nèi)科技Java培訓(xùn)小課堂就來(lái)給大家說(shuō)下什么是java的繼承?特點(diǎn)是什么?
一、概述
繼承描述的是事物之間的所屬關(guān)系。例如,兔子屬于食草動(dòng)物,食草動(dòng)物屬于動(dòng)物。它們之間有相同的行為,也有不同的行為,如果分別要進(jìn)行定義,那些相同的行為還要再次定義會(huì)就會(huì)顯得麻煩,所以我們把那些相同的行為重新定義到一個(gè)新類中,在其它類需要用她的時(shí)候在調(diào)用它就好。定義那些共同的行為的類叫做父類,而調(diào)用它們的類叫子類。
可見(jiàn),父類更通用,子類更具體。我們通過(guò)繼承,可以使多種事物之間形成一種關(guān)系體系。因此通俗的講,繼承就是子類繼承父類的屬性和行為,使得子類對(duì)象可以直接具有與父類相同的屬性、相同的行為。子類可以直接訪問(wèn)父類中的非私有的屬性和行為。
二、繼承在java中的應(yīng)用
那么,繼承在java中到底如何運(yùn)用呢?那就必須借助到extends關(guān)鍵字了
發(fā)現(xiàn),咱們并沒(méi)有在Studnet類和Teacher類中定義eat方法,但咱們還能正常調(diào)用eat方法,這就是繼承的體現(xiàn)。
繼承的優(yōu)點(diǎn)
1.提高代碼的復(fù)用性(減少代碼冗余,相同代碼重復(fù)利用)。
2.使類與類之間產(chǎn)生了關(guān)系。
三、子類不能繼承的內(nèi)容
并不是父類的所有內(nèi)容都可以給子類繼承的,有一些內(nèi)容是子類無(wú)法繼承的。
如:子類不能繼承父類的構(gòu)造方法,因?yàn)闃?gòu)造方法要求和當(dāng)前類名必須一致;子類可以繼承父類的私有成員,但是不能直接使用,必須間接使用,要提供get set方法。
私有化的成員變量和成員方法是不能被訪問(wèn)的,只能在本類中調(diào)用,所以子類繼承父類并不是繼承父類中的所有內(nèi)容。
四、繼承特點(diǎn)
只需明確一點(diǎn),java只支持單繼承,不支持多繼承,但支持多重繼承。
五、繼承后成員變量的特點(diǎn)
Java培訓(xùn)小課堂在上面的測(cè)試類代碼中,僅僅只創(chuàng)建了子類對(duì)象,并沒(méi)有創(chuàng)建父類對(duì)象,但在程序運(yùn)行中卻使用了父類中的成員變量,這說(shuō)明在程序中已經(jīng)為父類的成員變量開(kāi)辟了空間。所以,當(dāng)子類繼承了父類,在創(chuàng)建子類對(duì)象的時(shí)候,堆中的子類對(duì)象中會(huì)劃分出一片空間來(lái)保存父類中的成員變量。
Java培訓(xùn)小課堂上述代碼創(chuàng)建子類對(duì)象,給堆中子類和父類中的成員變量分別隱式初始化值后,創(chuàng)建好的對(duì)象會(huì)去調(diào)用子類的無(wú)參構(gòu)造函數(shù),在執(zhí)行無(wú)參構(gòu)造函數(shù)里面的代碼之前,會(huì)先執(zhí)行隱式三步,即調(diào)用父類中的構(gòu)造函數(shù)super().
Java培訓(xùn)小課堂說(shuō)明:super具有幾個(gè)作用:
1.super(實(shí)參)調(diào)用父類的構(gòu)造方法
2.super.父類的成員變量:使用父類的成員變量
3.super.父類的成員方法(實(shí)參)
六、繼承中成員方法的特點(diǎn)
首先是子類中含有不同名方法的調(diào)用順序,原則是就近原則,子類中沒(méi)有而父類中有,執(zhí)行父類中的方法,子類中有父類中也有,執(zhí)行子類中的方法。
七、方法重寫(xiě)
子類中出現(xiàn)與父類一模一樣的方法時(shí)(返回值類型,方法名和參數(shù)列表都相同),會(huì)出現(xiàn)覆蓋效果,也稱為重寫(xiě)或者復(fù)寫(xiě)。聲明不變,重新實(shí)現(xiàn)。
構(gòu)成條件:
1.有繼承
2.子類的方法返回值類型方法名參數(shù)列表(參數(shù)類型)必須一致
3.子類的權(quán)限修飾符必須大于等于父類的權(quán)限修飾符
代碼示例的話可以參考上面代碼,差別不大。
八、構(gòu)造器
構(gòu)造器的名字是與類名一致的。所以子類是無(wú)法繼承父類構(gòu)造方法的。構(gòu)造器的作用是初始化對(duì)象成員變量數(shù)據(jù)的。所以子類的初始化過(guò)程中,必須先執(zhí)行父類的初始化動(dòng)作。子類的構(gòu)造方法中默認(rèn)有一個(gè)super(),表示調(diào)用父類的構(gòu)造方法,父類成員變量初始化后,才可以給子類使用。
今天的Java培訓(xùn)小課堂到此為止,咱們下期再見(jiàn)。