日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java面试面向对象三大特征,Java面试经典基础问答三

發(fā)布時(shí)間:2023/12/19 java 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java面试面向对象三大特征,Java面试经典基础问答三 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 寫(xiě)clone()方法時(shí),通常都有一行代碼,是什么?

在實(shí)際編程過(guò)程中,我們常常要遇到這種情況:有一個(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ì)象確定的。Clone 有缺省行為,super.clone();他負(fù)責(zé)產(chǎn)生正確大小的空間,并逐位復(fù)制。使用clone()來(lái)復(fù)制一個(gè)對(duì)象,clone()從Object類繼承。所有具有clone功能的類都有一個(gè)特性,那就是它直接或間接地實(shí)現(xiàn)了Cloneable接口。

protected native Object clone() throws CloneNotSupportedException;

可以看出它是一個(gè)protected方法,所以我們不能簡(jiǎn)單地調(diào)用它;關(guān)鍵字native,表明這個(gè)方法使用java以外的語(yǔ)言實(shí)現(xiàn)。

2. 面向?qū)ο蟮奶卣饔心男┓矫?#xff1f;

封裝、抽象、繼承、多態(tài)。

封裝是保證軟件部件具有優(yōu)良的模塊性的基礎(chǔ),封裝的目標(biāo)就是要實(shí)現(xiàn)軟件部件的“高內(nèi)聚、低耦合”,防止程序相互依賴性而帶來(lái)的變動(dòng)影響。在面向?qū)ο蟮木幊陶Z(yǔ)言中,對(duì)象是封裝的最基本單位,面向?qū)ο蟮姆庋b比傳統(tǒng)語(yǔ)言的封裝更為清晰、更為有力。

抽象就是找出一些事物的相似和共性之處,然后將這些事物歸為一個(gè)類,這個(gè)類只考慮這些事物的相似和共性之處,并且會(huì)忽略與當(dāng)前主題和目標(biāo)無(wú)關(guān)的那些方面,將注意力集中在與當(dāng)前目標(biāo)有關(guān)的方面。

在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)之上來(lái)進(jìn)行,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并可以加入若干新的內(nèi)容,或修改原來(lái)的方法使之更適合特殊的需要,這就是繼承。繼承是子類自動(dòng)共享父類數(shù)據(jù)和方法的機(jī)制,這是類之間的一種關(guān)系,提高了軟件的可重用性和可擴(kuò)展性。

多態(tài)是指程序中定義的引用變量所指向的具體類型和通過(guò)該引用變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定,即一個(gè)引用變量倒底會(huì)指向哪個(gè)類的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定。因?yàn)樵诔绦蜻\(yùn)行時(shí)才確定具體的類,這樣,不用修改源程序代碼,就可以讓引用變量綁定到各種不同的類實(shí)現(xiàn)上,從而導(dǎo)致該引用調(diào)用的具體方法隨之改變,即不修改程序代碼就可以改變程序運(yùn)行時(shí)所綁定的具體代碼,讓程序可以選擇多個(gè)運(yùn)行狀態(tài),這就是多態(tài)性。

3. java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?

多態(tài)分為編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。其中編輯時(shí)多態(tài)是靜態(tài)的,主要是指方法的重載,它是根據(jù)參數(shù)列表的不同來(lái)區(qū)分不同的函數(shù),通過(guò)編輯之后會(huì)變成兩個(gè)不同的函數(shù),在運(yùn)行時(shí)談不上多態(tài)。而運(yùn)行時(shí)多態(tài)是動(dòng)態(tài)的,它是通過(guò)動(dòng)態(tài)綁定來(lái)實(shí)現(xiàn)的,也就是我們所說(shuō)的多態(tài)性。

父類或接口定義的引用變量可以指向子類或具體實(shí)現(xiàn)類的實(shí)例對(duì)象,而程序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定,就是引用變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存里正在運(yùn)行的那個(gè)對(duì)象的方法,而不是引用變量的類型中定義的方法。

當(dāng)超類對(duì)象引用變量引用子類對(duì)象時(shí),被引用對(duì)象的類型而不是引用變量的類型決定了調(diào)用誰(shuí)的成員方法,但是這個(gè)被調(diào)用的方法必須是在超類中定義過(guò)的,也就是說(shuō)被子類覆蓋的方法,但是它仍然要根據(jù)繼承鏈中方法調(diào)用的優(yōu)先級(jí)來(lái)確認(rèn)方法。

4. abstract class和interface有什么區(qū)別?

含有abstract修飾符的class即為抽象類,abstract類不能創(chuàng)建實(shí)例對(duì)象。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體(Concrete)子類中實(shí)現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法。如果的子類沒(méi)有實(shí)現(xiàn)抽象父類中的所有抽象方法,那么子類也必須定義為abstract類型。

接口(interface)可以說(shuō)成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認(rèn)為public abstract類型,接口中的成員變量類型默認(rèn)為public static final。

下面比較一下兩者的語(yǔ)法區(qū)別:

(1)抽象類可以有構(gòu)造方法,接口中不能有構(gòu)造方法。

(2)抽象類中可以有普通成員變量,接口中沒(méi)有普通成員變量。

(3)抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。

(4)抽象類中的抽象方法的訪問(wèn)類型可以是public,protected和(默認(rèn)類型,雖然

eclipse下不報(bào)錯(cuò),但應(yīng)該也不行),但接口中的抽象方法只能是public類型的,并且默認(rèn)即為public abstract類型。

(5)抽象類中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法

(6)抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問(wèn)類型可以任意,但接口中定義的變量只能是public static final類型,并且默認(rèn)即為public static final類型。

(7)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類。

兩者在應(yīng)用上的區(qū)別:

接口更多的是在系統(tǒng)架構(gòu)設(shè)計(jì)方法發(fā)揮作用,主要用于定義模塊之間的通信契約。而抽象類在代碼實(shí)現(xiàn)方面發(fā)揮作用,可以實(shí)現(xiàn)代碼的重用,例如,模板方法設(shè)計(jì)模式(父類方法中間的某段代碼不確定,留給子類干,就用模板方法設(shè)計(jì)模式)是抽象類的一個(gè)典型應(yīng)用,假設(shè)某個(gè)項(xiàng)目的所有Servlet類都要用相同的方式進(jìn)行權(quán)限判斷、記錄訪問(wèn)日志和處理異常,那么就可以定義一個(gè)抽象的基類,讓所有的Servlet都繼承這個(gè)抽象基類,在抽象基類的service方法中完成權(quán)限判斷、記錄訪問(wèn)日志和處理異常的代碼,在各個(gè)子類中只是完成各自的業(yè)務(wù)邏輯代碼。

5. abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?

都不可以,因?yàn)閍bstract申明的方法是要求子類去實(shí)現(xiàn)的,abstract只是告訴你有這樣一個(gè)接口,你要去實(shí)現(xiàn),至于你的具體實(shí)現(xiàn)可以是native和synchronized,也可以不是,抽象方法是不關(guān)心這些事的,所以寫(xiě)這兩個(gè)是沒(méi)有意義的。然后,static方法是不會(huì)被覆蓋的,而abstract方法正是要子類去覆蓋它,所以也是沒(méi)有意義的。

abstract需要重載,static為類方法,沒(méi)有重載一說(shuō);abstract為沒(méi)有實(shí)現(xiàn)的方法,native為本機(jī)實(shí)現(xiàn)的方法,自相矛盾;abstract方法沒(méi)有實(shí)現(xiàn),也不可能實(shí)際調(diào)用抽象方法,沒(méi)有必要synchronized修飾,當(dāng)然子類可以根據(jù)需要同步該方法。

6. 什么是內(nèi)部類?Static Nested Class和Inner Class的不同。

Inner Class就是內(nèi)部類,內(nèi)部類就是在一個(gè)類的內(nèi)部定義的類,內(nèi)部類中不能定義靜態(tài)成員。內(nèi)部類可以直接訪問(wèn)外部類中的成員變量,內(nèi)部類可以定義在外部類的方法外面,也可以定義在外部類的方法體中。Static Nested Class是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴于外部類實(shí)例被實(shí)例化。而通常的內(nèi)部類需要在外部類實(shí)例化后才能實(shí)例化。

7. 內(nèi)部類可以引用它的包含類的成員嗎?有沒(méi)有什么限制?

完全可以。如果不是靜態(tài)內(nèi)部類,那沒(méi)有什么限制!如果你把靜態(tài)嵌套類當(dāng)作內(nèi)部類的一種特例,那在這種情況下不可以訪問(wèn)外部類的普通成員變量,而只能訪問(wèn)外部類中的靜態(tài)成員。

8. Anonymous Inner Class (匿名內(nèi)部類)是否可以extends(繼承)其它類,是否可以implements(實(shí)現(xiàn))interface(接口)?

可以繼承其他類或?qū)崿F(xiàn)其他接口。不僅是可以,而是必須!但若是通過(guò)extends 或implements等關(guān)鍵字那是不可能的.

9. super.getClass()方法調(diào)用,下面程序的輸出結(jié)果是多少?

在test方法中,直接調(diào)用getClass().getName()方法,返回的是Test類名。由于getClass()在Object類中定義成了final,子類不能覆蓋該方法,所以,在test方法中調(diào)用getClass().getName()方法,其實(shí)就是在調(diào)用從父類繼承的getClass()方法,等效于調(diào)用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也應(yīng)該是Test。如果想得到父類的名稱,應(yīng)該用如下代碼:getClass().getSuperClass().getName()。

10. String是最基本的數(shù)據(jù)類型嗎?

基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。java.lang.String類是final類型的,因此不可以繼承這個(gè)類、不能修改這個(gè)類。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer(線程安全,建議多線程使用)類或StringBuilder(線程不安全,建議單線程使用)類。

總結(jié)

以上是生活随笔為你收集整理的Java面试面向对象三大特征,Java面试经典基础问答三的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。