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