詳解Java封裝繼承多態(tài),初學(xué)者必看

詳解Java封裝繼承多態(tài),初學(xué)者必看

深圳達(dá)內(nèi)教育      2022-04-03 03:35:01     11

詳解Java封裝繼承多態(tài),初學(xué)者必看,面向?qū)ο缶幊蹋∣bject Oriented Programming)有三大特性:封裝、繼承、多態(tài)。在這里,和大家一起加深對三者的理解。封裝封裝可

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細(xì)介紹

面向?qū)ο缶幊蹋∣bject Oriented Programming)有三大特性:封裝、繼承、多態(tài)。在這里,和大家一起加深對三者的理解。

封裝

封裝可以拆開理解,裝,是把數(shù)據(jù)和方法放進了類里;封,把裝進去的數(shù)據(jù)和成員方法加上訪問權(quán)限。對于外界,內(nèi)部細(xì)節(jié)是透明的,暴露給外面的是它的訪問方法。

繼承

繼承,是為了重用父類代碼。兩個類若具有is a的關(guān)系就可以用extends。另外,繼承也為實現(xiàn)多態(tài)做了鋪墊。

多態(tài)

程序中定義的引用變量(java有兩大數(shù)據(jù)類型,內(nèi)部數(shù)據(jù)類型和引用數(shù)據(jù)類型)所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編譯時并不確定,而是在程序運行期間才確定,即一個引用變量到低指向哪個類的實例對象,該引用變量發(fā)出的方法調(diào)用到底是哪個類中實現(xiàn)的方法,必須在程序運行期間才能決定。

在理解多態(tài)時,總是逃不掉“向上轉(zhuǎn)型”。

問題的核心在于,一般情況下,在子類繼承父類后,子類具有父類的所有成員和方法。但是在向上轉(zhuǎn)型之后,子類中一些獨有的成員和方法對于該父類類型的引用變量則“不可見”。

實例

package?binaryheap.test;import?java.awt.image.SinglePixelPackedSampleModel;//創(chuàng)建一個Animal類class?Animal?{????public?void?run()?{????????System.out.println("Animal在奔跑?。?!");????????sing();????}?????public?void?sing()?{????????System.out.println("Animal在唱歌~~~");????}?}?//創(chuàng)建一個子類繼承父類class?Lion?extends?Animal?{????//?重載run()方法,和父類中的run()方法不是一個????//?向上轉(zhuǎn)型時會丟失該方法????public?void?run(String?anotherAnimal)?{?????????System.out.println(("Lion在追一只"?+?anotherAnimal));;????????sing();????}????//?重寫????public?void?sing()?{????????System.out.println("Lion在唱歌~~~");????}}?public?class?BH?{????public?static?void?main(String[]?args)?{????????//?創(chuàng)建一個父類引用,但是指向Lion對象????????Animal?animal?=?new?Lion();????????animal.run();????}}結(jié)果:Animal在奔跑?。?!Lion在唱歌~~~

Animal animal=new Lion();向上轉(zhuǎn)型后的Animal類型的引用,丟失了重載的方法run(),即子類中的run(),指向的是父類的run(),因此輸出“Animal在奔跑”,而不是“Lion在奔跑”。run()方法中調(diào)用了sing()方法,因為sing()方法被重寫,引用能夠找到sing()方法,因此引用調(diào)用此sing()方法(動然調(diào)用),輸出“Lion在唱歌”。

實現(xiàn)多態(tài)的必要條件為:繼承、重寫、向上轉(zhuǎn)型(或者說父類引用指向子類對象)。其實現(xiàn)機制為:調(diào)用那個方法是由被引用對象的類型決定,而不是引用變量的類型決定的,并且這個被調(diào)用的方法必須是被子類重寫過的。

總結(jié):

•使用父類的引用指向子類對象

•該引用只能調(diào)用父類中定義的方法和變量

•若子類重寫了父類的一個方法(只能重寫方法,不能重寫變量,否則編譯時期會報錯),那么調(diào)用的時候會調(diào)用子類的這個方法。

此外,在多態(tài)引用時,可能會涉及到超類的構(gòu)造方法。調(diào)用超類的構(gòu)造方法的順序是先調(diào)用最遠(yuǎn)的超類的構(gòu)造方法。

以上就是深圳達(dá)內(nèi)教育java培訓(xùn)機構(gòu)的小編針對“詳解Java封裝繼承多態(tài),初學(xué)者必看”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹(jǐn)防上當(dāng)。