更新時(shí)間:2022-12-16 16:08:16 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽961次
1.Java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么
在 Java 語(yǔ)言中,多態(tài)主要有以下兩種表現(xiàn)方式:
1)方法的重載(overload)。重載是指同一個(gè)類中有多個(gè)同名的方法,但這些方法有著不同的參數(shù),因此在編譯時(shí)就可以確定到底調(diào)用哪個(gè)方法,它是一種編譯時(shí)多態(tài)。重載可以被看作一個(gè)類中的方法多態(tài)性。
2)方法的覆蓋(overide)。子類可以覆蓋父類的方法,因此同樣的方法會(huì)在父類與子類中有著不同的表現(xiàn)形式。在 Java 語(yǔ)言中,基類的引用變量不僅可以指向基類的實(shí)例對(duì)象,也可以指向其子類的實(shí)例對(duì)象。同樣,接口的引用變量也可以指向其實(shí)現(xiàn)類的實(shí)例對(duì)象,而程序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定(綁定指的是將一個(gè)方法調(diào)用和一個(gè)方法主體連接到一起),就是引用變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存里正在運(yùn)行的那個(gè)對(duì)象的方法,而不是引用變量的類型中定義的方法。通過(guò)這種動(dòng)態(tài)綁定的方法實(shí)現(xiàn)了多態(tài)。由于只有在運(yùn)行時(shí)才能確定調(diào)用哪個(gè)方法,因此通過(guò)方法覆蓋實(shí)現(xiàn)的多態(tài)也可以被稱為運(yùn)行時(shí)多態(tài)。
2.什么是Java序列化,如何實(shí)現(xiàn)
什么是序列化:序列化是java提供的一種機(jī)制,通過(guò)這種機(jī)制,一個(gè)對(duì)象可以表示為一個(gè)字節(jié)序列,存儲(chǔ)到磁盤中。將序列化的對(duì)象寫入文件后,通過(guò)反序列化從文件中讀取出來(lái)。
為什么要序列化:對(duì)象、文件、數(shù)據(jù)有很多種格式,很難統(tǒng)一傳輸和保存,序列化后就可以將這些數(shù)據(jù)轉(zhuǎn)換成統(tǒng)一格式,方便傳輸。使用時(shí)再將其反序列化即可。
序列化過(guò)程:
(1)繼承Serializable接口,并且設(shè)置serialVersionUID。
(2)定義文件存儲(chǔ)位置
(3)實(shí)現(xiàn)writeUser方法
3.一個(gè)”.java”源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制(明略數(shù)據(jù))
可以有多個(gè)類,但是只能有一個(gè)public的類,帶public的類的類名必須和文件名一致。
4.Overload 和 Override 的區(qū)別。
1、重載發(fā)生在本類,重寫發(fā)生在父類與子類之間;
2、重載的方法名必須相同,重寫的方法名相同且返回值類型必須相同;
3、重載的參數(shù)列表不同,重寫的參數(shù)列表必須相同。
4、重寫的訪問(wèn)權(quán)限不能比父類中被重寫的方法的訪問(wèn)權(quán)限更低。
5、構(gòu)造方法不能被重寫
5.super和this的區(qū)別?
this表示當(dāng)前類對(duì)象,super表示當(dāng)前類的父類
(1)屬性的區(qū)別:this訪問(wèn)該類的屬性,子類中沒(méi)有找父類中的屬性。super訪問(wèn)父類中的屬性。
(2)方法的區(qū)別:this訪問(wèn)該類的方法,子類中沒(méi)有找父類中的方法。super訪問(wèn)父類中的方法。
(3)構(gòu)造的區(qū)別:this調(diào)用本類構(gòu)造,務(wù)必放在構(gòu)造方法的第一行。super調(diào)用父類構(gòu)造,務(wù)必放在子類構(gòu)造方法首行。
6.接口與抽象類的區(qū)別?
(1)抽象類要被類繼承,接口要被類實(shí)現(xiàn);
(2)接口可多繼承接口,但是類只能單繼承;
(3)抽象類可以有構(gòu)造器,但是接口不能有構(gòu)造器
(4)抽象類:除了不能實(shí)例化抽象類之外,其他和普通類沒(méi)區(qū)別
(5)抽象類:抽象方法可以有public、protected、缺省這些修飾符,接口只能是public
(6)抽象類可以有成員變量,接口只能聲明常量
7.構(gòu)造方法可否能被重寫?
構(gòu)造方法不能被重寫
8.接口是否可繼承接口?抽象類是否可實(shí)現(xiàn)(implements)接口?抽象類是否可繼承實(shí)現(xiàn)類(concrete class)?
1、接口可以繼承接口,抽象類不可以繼承接口,但可以實(shí)現(xiàn)接口。
2、抽象類可以繼承實(shí)體類。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是否可繼承實(shí)體類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。
3.抽象類可以繼承實(shí)體類,就是因?yàn)槌橄箢惖目梢岳^承性和有方法。
4、一個(gè)接口可以繼承多個(gè)接口. interface C extends A, B {}是可以的. 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口: class D implements A,B,C{} 但是一個(gè)類只能繼承一個(gè)類,不能繼承多個(gè)類 class B extends A{} 在繼承類的同時(shí),也可以實(shí)現(xiàn)接口: class E extends D implements A,B,C{} 這也正是選擇用接口而不是抽象類的原因。
9.類的組成和執(zhí)行順序?
1.先執(zhí)行Test類的靜態(tài)代碼塊后執(zhí)行Test類的main方法,說(shuō)明要執(zhí)行類的方法需要先加載這個(gè)類。
2.在創(chuàng)建ClassB的對(duì)象時(shí),先去加載了父類ClassA。說(shuō)明加載子類時(shí)如果沒(méi)有加載父類,會(huì)先加載父類。
3.靜態(tài)變量賦值和靜態(tài)代碼塊都會(huì)在類加載的時(shí)候執(zhí)行,執(zhí)行順序與靜態(tài)變量和靜態(tài)代碼塊出現(xiàn)的先后順序一致。
4.如果在類的靜態(tài)代碼塊執(zhí)行之前創(chuàng)建該類的對(duì)象,則會(huì)先執(zhí)行該類的構(gòu)造代碼塊和構(gòu)造方法。
5.構(gòu)造代碼塊總是在構(gòu)造函數(shù)之前執(zhí)行。
6.創(chuàng)建子類對(duì)象,需要先初始化父類的對(duì)象。所以先執(zhí)行父類的構(gòu)造代碼塊和構(gòu)造方法,再執(zhí)行子類的構(gòu)造代碼塊和構(gòu)造方法
以上就是“高頻出現(xiàn)的面向?qū)ο竺嬖囶}”,你能回答上來(lái)嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743