2020年Java面試題庫(kù)之面向?qū)ο? class=

2020年Java面試題庫(kù)之面向?qū)ο?

長(zhǎng)沙達(dá)內(nèi)教育      2022-04-22 07:35:01     10

2020年Java面試題庫(kù)之面向?qū)ο?2020年Java面試題庫(kù)之面向?qū)ο?,面向?qū)ο笠詳?shù)據(jù)為中心的開發(fā)方式,使用繼承來(lái)簡(jiǎn)化開發(fā)過程,使用接口來(lái)規(guī)范對(duì)數(shù)據(jù)的操作,使用多

課程價(jià)格 請(qǐng)咨詢

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

詳細(xì)介紹

    2020年Java面試題庫(kù)之面向?qū)ο?,面向?qū)ο笠詳?shù)據(jù)為中心的開發(fā)方式,使用繼承來(lái)簡(jiǎn)化開發(fā)過程,使用接口來(lái)規(guī)范對(duì)數(shù)據(jù)的操作,使用多態(tài)達(dá)到操作的靈活性??梢哉f(shuō)面向?qū)ο笫荍ava面試中的一個(gè)常見重要考點(diǎn),因此本文為大家整理了面向?qū)ο蟮南嚓P(guān)面試題,其中包括面向?qū)ο蟮奶匦?、訪問權(quán)限修飾符和clone對(duì)象的理解

     問題一、面向?qū)ο蠖加心男┨匦砸约澳銓?duì)這些特性的理解繼承

    1、繼承:繼承是從已有類得到繼承信息創(chuàng)建新類的過程。提供繼承信息的類被稱為父類(超類、基類);得到繼承信息的類被稱為子類(派生類)。繼承讓變化中的軟件系統(tǒng)有了一定的延續(xù)性,同時(shí)繼承也是封裝程序中可變因素的重要手段。

    2、封裝:通常認(rèn)為封裝是把數(shù)據(jù)和操作數(shù)據(jù)的方法綁定起來(lái),對(duì)數(shù)據(jù)的訪問只能通過已定義的接口。面向?qū)ο蟮谋举|(zhì)就是將現(xiàn)實(shí)世界描繪成一系列完全自治、封閉的對(duì)象。我們?cè)陬愔芯帉懙姆椒ň褪菍?duì)實(shí)現(xiàn)細(xì)節(jié)的一種封裝;我們編寫一個(gè)類就是對(duì)數(shù)據(jù)和數(shù)據(jù)操作的封裝??梢哉f(shuō),封裝就是隱藏一切可隱藏的東西,只向外界提供最簡(jiǎn)單的編程接口。

    3、多態(tài)性:多態(tài)性是指允許不同子類型的對(duì)象對(duì)同一消息作出不同的響應(yīng)。簡(jiǎn)單的說(shuō)就是用同樣的對(duì)象引用調(diào)用同樣的方法但是做了不同的事情。多態(tài)性分為編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。如果將對(duì)象的方法視為對(duì)象向外界提供的服務(wù),那么運(yùn)行時(shí)的多態(tài)性可以解釋為:當(dāng)A系統(tǒng)訪問B系統(tǒng)提供的服務(wù)時(shí),B系統(tǒng)有多種提供服務(wù)的方式,但一切對(duì)A系統(tǒng)來(lái)說(shuō)都是透明的。方法重載(overload)實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性(也稱為前綁定),而方法重寫實(shí)現(xiàn)的是運(yùn)行時(shí)的多態(tài)性(也稱為后綁定)。運(yùn)行時(shí)的多態(tài)是面向?qū)ο笞罹璧臇|西,要實(shí)現(xiàn)多態(tài)需要做兩件事:

    (1)方法重寫(子類繼承父類并重寫父類中已有的或抽象的方法)

    (2)對(duì)象造型(用父類型引用引用子類型對(duì)象,這樣同樣的引用調(diào)用同樣的方法就會(huì)根據(jù)子類對(duì)象的不同而表現(xiàn)出不同的行為)。

    4、抽象:抽象是將一類對(duì)象的共同特征總結(jié)出來(lái)構(gòu)造類的過程,包括數(shù)據(jù)抽象和行為抽象兩方面。抽象只關(guān)注對(duì)象有哪些屬性和行為,并不關(guān)注這些行為的細(xì)節(jié)是什么。

    注意:默認(rèn)情況下面向?qū)ο笥?大特性,封裝、繼承、多態(tài),如果面試官問讓說(shuō)出4大特性,那么我們就把抽象加上去。

    問題二:訪問權(quán)限修飾符public、private、protected,以及不寫(默認(rèn))時(shí)的區(qū)別。

    該題目比較簡(jiǎn)單,不同的權(quán)限修飾符的區(qū)別見下表。

    問題三:如何理解clone對(duì)象

    1、為什么要用clone?

    在實(shí)際編程過程中,我們常常要遇到這種情況:有一個(gè)對(duì)象A,在某一時(shí)刻A中已經(jīng)包含了一些有效值,此時(shí)可能會(huì)需要一個(gè)和A完全相同新對(duì)象B,并且此后對(duì)B任何改動(dòng)都不會(huì)影響到A中的值,也就是說(shuō),A與B是兩個(gè)獨(dú)立的對(duì)象,但B的初始值是由A對(duì)象確定的。在Java語(yǔ)言中,用簡(jiǎn)單的賦值語(yǔ)句是不能滿足這種需求的。要滿足這種需求雖然有很多途徑,但實(shí)現(xiàn)clone()方法是其中最簡(jiǎn)單,也是最高效的手段。

    2、new一個(gè)對(duì)象的過程和clone一個(gè)對(duì)象的過程區(qū)別

    new操作符的本意是分配內(nèi)存。程序執(zhí)行到new操作符時(shí),首先去看new操作符后面的類型,因?yàn)橹懒祟愋?,才能知道要分配多大的?nèi)存空間。分配完內(nèi)存之后,再調(diào)用構(gòu)造函數(shù),填充對(duì)象的各個(gè)域,這一步叫做對(duì)象的初始化,構(gòu)造方法返回后,一個(gè)對(duì)象創(chuàng)建完畢,可以把他的引用(地址)發(fā)布到外部,在外部就可以使用這個(gè)引用操縱這個(gè)對(duì)象。

    clone在第一步是和new相似的,都是分配內(nèi)存,調(diào)用clone方法時(shí),分配的內(nèi)存和原對(duì)象(即調(diào)用clone方法的對(duì)象)相同,然后再使用原對(duì)象中對(duì)應(yīng)的各個(gè)域,填充新對(duì)象的域,填充完成之后,clone方法返回,一個(gè)新的相同的對(duì)象被創(chuàng)建,同樣可以把這個(gè)新對(duì)象的引用發(fā)布到外部。

    3、clone對(duì)象的使用

    (1)復(fù)制對(duì)象和復(fù)制引用的區(qū)別

    Personp=newPerson(23,"zhang");

    Personp1=p;

    System.out.println(p);

    System.out.println(p1);

    當(dāng)Personp1=p;執(zhí)行之后,是創(chuàng)建了一個(gè)新的對(duì)象嗎?首先看打印結(jié)果:

    com.itheima.Person@2f9ee1ac

    com.itheima.Person@2f9ee1ac

    可以看出,打印的地址值是相同的,既然地址都是相同的,那么肯定是同一個(gè)對(duì)象。p和p1只是引用而已,他們都指向了一個(gè)相同的對(duì)象Person(23,“zhang”)??梢园堰@種現(xiàn)象叫做引用的復(fù)制。上面代碼執(zhí)行完成之后,內(nèi)存中的情景如下圖所示:

 

    而下面的代碼是真真正正的克隆了一個(gè)對(duì)象

    Personp=newPerson(23,"zhang");

    Personp1=(Person)p.clone();

    System.out.println(p);

    System.out.println(p1);

    從打印結(jié)果可以看出,兩個(gè)對(duì)象的地址是不同的,也就是說(shuō)創(chuàng)建了新的對(duì)象,而不是把原對(duì)象的地址賦給了一個(gè)新的引用變量:

    com.itheima.Person@2f9ee1ac

    com.itheima.Person@67f1fba0

    以上代碼執(zhí)行完成后,內(nèi)存中的情景如下圖所示:

 以上就是長(zhǎng)沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“2020年Java面試題庫(kù)之面向?qū)ο?rdquo;的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

Java面試題

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