Java面試題(面向?qū)ο螅第1頁(yè)
Java面試題(面向?qū)ο螅第2頁(yè)
Java面試題(面向?qū)ο螅第3頁(yè)
Java面試題(面向?qū)ο螅第4頁(yè)
Java面試題(面向?qū)ο螅第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1、以下說(shuō)法錯(cuò)誤的選項(xiàng)是?IA:盡管現(xiàn)行的Java語(yǔ)言版本不允許類(lèi)的多繼承,但是我們?nèi)匀豢梢栽趀xtends關(guān) 鍵字后面放置一個(gè)列表B:在實(shí)現(xiàn)多態(tài)后,利用父類(lèi)引用(聲明時(shí)類(lèi)型)調(diào)用父類(lèi)子類(lèi)均聲明了的變量和方 法,均調(diào)用在子類(lèi)中聲明的版本C: Java中代碼重用中的has a關(guān)系通過(guò)定義類(lèi)屬性方式實(shí)現(xiàn),is a通過(guò)類(lèi)繼承來(lái) 實(shí)現(xiàn)D:this關(guān)鍵字代表當(dāng)前對(duì)象,即this引用的是當(dāng)前創(chuàng)立的類(lèi)實(shí)例對(duì)象的句柄解析:利用聲明時(shí)類(lèi)型調(diào)用父類(lèi)和子類(lèi)同時(shí)聲明的屬性時(shí),調(diào)用方法是子類(lèi)(運(yùn)行時(shí)類(lèi) 型)聲明的,而變量那么是調(diào)用父類(lèi)(聲明時(shí)類(lèi)型)聲明的PS : is-a,顧名思義,是一個(gè),代表繼承關(guān)系。如果Ais-a

2、B,打儂 就是A的父類(lèi)。一個(gè)類(lèi)完全包含另一個(gè)類(lèi)的所有屬性及行為。例如PC機(jī)是計(jì)算機(jī),工作站也是計(jì)算機(jī),PC機(jī)和工作站是兩種不同類(lèi)型的計(jì)算機(jī), 但都繼承了計(jì)算機(jī)的共同特性。因此在用Java語(yǔ)言實(shí)現(xiàn)時(shí),應(yīng)該將PC機(jī)和工作站定義 成兩種類(lèi),均繼承計(jì)算機(jī)類(lèi)。has-a,顧名思義,有一個(gè),代表附屬關(guān)系。如果A has a B,那么B就是A的組成局部。同一種類(lèi)的對(duì)象,通過(guò)它們的屬性的 不同值來(lái)區(qū)別。例如一臺(tái)PC機(jī)的操作系統(tǒng)是Windows,另一臺(tái)PC機(jī)的操作系統(tǒng)是Linux。操作系 統(tǒng)是PC機(jī)的一個(gè)成員變量,根據(jù)這一成員變量的不同值,可以區(qū)分不同的PC機(jī)對(duì)象。Hke-a,顧名思義,像一個(gè),代表組合關(guān)系。如

3、果A like aB,那么B就是A的接口。新類(lèi)型有老類(lèi)型的接口,但還包含其他函 數(shù),所以不能說(shuō)它們完全相同。例如一臺(tái)手機(jī)可以說(shuō)是一個(gè)微型計(jì)算機(jī),但是手機(jī)的通訊功能顯然不是計(jì)算機(jī)具備 的行為,所以手機(jī)繼承了計(jì)算機(jī)的特性,同時(shí)需要實(shí)現(xiàn)通訊功能,而通訊功能需要作為 單獨(dú)接口,而不是計(jì)算機(jī)的行為。2、以下哪個(gè)是有關(guān)封裝優(yōu)點(diǎn)的正確描述*A、只需要一個(gè)public方法B、從任何方法中沒(méi)有異常拋出C、可以不需要改變接口來(lái)改變實(shí)現(xiàn),以到達(dá)外部使用代碼無(wú)需變動(dòng)D、可以不需要改變實(shí)現(xiàn)來(lái)改變接口,以到達(dá)外部使用代碼無(wú)需變動(dòng)解析:封裝把實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái)了,因此封裝可以實(shí)現(xiàn)對(duì)類(lèi)內(nèi)部的改變不會(huì)影響到其他 代碼3、以下說(shuō)法

4、錯(cuò)誤的選項(xiàng)是?|A、Java中接口不能被private或Protected修飾符修飾B、Java中一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,但是只能繼承一個(gè)父類(lèi)C、接口中定義的成員變量,即使不說(shuō)明,默認(rèn)均是publicstaticfinal的D、finalstaticnative關(guān)鍵字不能修飾接口,解析:內(nèi)部接口可以用static修飾26、如果類(lèi)中的成員變量只可以被同一包訪問(wèn),那么使用如下哪個(gè)約束符?|privatepublicprotectedno modifierprivate :表示私有,私有的意思就是除了class自己之外,任何人都不可 以直接使用,私有財(cái)產(chǎn)神圣不可侵犯嘛,即便是子女,朋友,都不可以使用

5、。public :說(shuō)明該數(shù)據(jù)成員、成員函數(shù)是對(duì)所有用戶(hù)開(kāi)放的,所有用戶(hù)都可以protected : protected對(duì)于子女、朋友來(lái)說(shuō),就是public的,可以自由使 用,沒(méi)有任何限制,而對(duì)于其他的外部class, protected就變成private。nomodifier (friendly)同樣,沒(méi)有明確指明access modifier的成員就是 friendly的,相同包(package)內(nèi)的所有類(lèi)都能訪問(wèn),不同包之間不能訪問(wèn)friendly 成員27、以下哪個(gè)約束符可用于定義成員常量staticfinalabstractconst解析:不解釋28、給出如下代碼:|class Te

6、st(private int m;public static void fun() / some code.)如何使成員變量m被函數(shù)fun()直接訪問(wèn)?A、將 private int m 改為protected int mB、將private int m 改為 public int mC、將private int m 改為 static int mD、將 private int m 改為 int m解析:靜態(tài)方法調(diào)用成員變量需要將成員變量定義為靜態(tài)29、以下代碼能否正常運(yùn)行,如果能夠正常運(yùn)行,輸出結(jié)果是什么|public class TestClass public static void m

7、ain(String args) int numl=5;int num2=5;class InnerClasspublic intaddO return numl+num2;);InnerClass in=new InnerClass();System. out. println(in. add();)A、輸出10B、輸出0C、運(yùn)行時(shí)輸出異常信息D、編譯不能通過(guò)解析:不解釋30、以下代碼的執(zhí)行結(jié)果是什么? |public class Example public static void main(String args) Base b = new Base ();Subclassl SI =

8、new Subclassl();Subclass2 s2 = new Subclass2();si = (Subclassl) s2;)class Base class Subclassl extends Base )class Subclass2 extends Base A、代碼編譯成功,運(yùn)行期間沒(méi)有異常拋出B、代碼編譯失敗,賦值語(yǔ)句si = (Subclassl) s2非法C、代碼編譯成功,但運(yùn)行時(shí)ClassCastException對(duì)象造型異常被拋出D、代碼編譯失敗,因?yàn)橐粋€(gè)基類(lèi)不能被多個(gè)子類(lèi)繼承解析:Subclass2 s2 = new Subclass2 ()中新建的是Subcla

9、ss2的對(duì)象;所以不可以進(jìn)行對(duì)象說(shuō)明;但是,當(dāng)Sbuclassl si =newSbuclass2 ();時(shí)可以進(jìn)行對(duì)象說(shuō)明;31、以下代碼的執(zhí)行結(jié)果是:|public class Example static inti = 1, j = 2; static display(i);i = i + j;static void display(int n) System, out. printin (n);public static void main(String args) display(i);A、1 2B、0 1C、1 3D、1 1解析:首先執(zhí)行靜態(tài)代碼塊,接著執(zhí)行構(gòu)造代碼塊,最后指向構(gòu)造

10、方法32、對(duì)于內(nèi)部類(lèi),以下說(shuō)法錯(cuò)誤的選項(xiàng)是|A、匿名內(nèi)部類(lèi)可以實(shí)現(xiàn)接口或繼承其他類(lèi),但不能同時(shí)即實(shí)現(xiàn)接口又繼承類(lèi)B、匿名內(nèi)部類(lèi)不能有任何明確的構(gòu)造器C、內(nèi)部類(lèi)可以定義在外部類(lèi)類(lèi)體中,也可以定義在外部類(lèi)的方法體中,和外部類(lèi)不 同,內(nèi)部類(lèi)均能使用訪問(wèn)修飾符,并能使用static修飾D、在Java中,對(duì)內(nèi)部類(lèi)的嵌套層次沒(méi)有限制解析:定義在外部類(lèi)方法中的內(nèi)部類(lèi)不可以使用static修飾。成員位置:在成員位置定義的類(lèi),被稱(chēng)為成員內(nèi)部類(lèi)。局部位置:在局部位置定義的類(lèi),被稱(chēng)為局部?jī)?nèi)部類(lèi)。內(nèi)部類(lèi):.內(nèi)部類(lèi)對(duì)象可以訪問(wèn)創(chuàng)立它的對(duì)象的實(shí)現(xiàn),包括私有數(shù)據(jù);.內(nèi)部類(lèi)不為同一包的其他類(lèi)所見(jiàn),具有很好的封裝性;.使用內(nèi)部

11、類(lèi)可以很方便的編寫(xiě)事件驅(qū)動(dòng)程序;.匿名內(nèi)部類(lèi)可以方便的定義運(yùn)行時(shí)回調(diào);.內(nèi)部類(lèi)可以方便的定義成員內(nèi)部類(lèi),就是作為外部類(lèi)的成員,可以直接使用外部類(lèi)的所有成員和方法, 即使是private的。同時(shí)外部類(lèi)要訪問(wèn)內(nèi)部類(lèi)的所有成員變量/方法,那么需要通過(guò)內(nèi)部 類(lèi)的對(duì)象來(lái)獲取。要注意的是,成員內(nèi)部類(lèi)不能含有static的變量和方法。因?yàn)槌蓡T內(nèi)部類(lèi)需要 先創(chuàng)立了外部類(lèi),才能創(chuàng)立它自己的,局部?jī)?nèi)部類(lèi),是指內(nèi)部類(lèi)定義在方法和作用域內(nèi)。、嵌套內(nèi)部類(lèi)嵌套內(nèi)部類(lèi),就是修飾為static的內(nèi)部類(lèi)。聲明為static的內(nèi)部類(lèi),不需要 內(nèi)部類(lèi)對(duì)象和外部類(lèi)對(duì)象之間的聯(lián)系,就是說(shuō)我們可以直接引用。uter. inner,即不需

12、 要?jiǎng)?chuàng)立外部類(lèi),也不需要?jiǎng)?chuàng)立內(nèi)部類(lèi)。嵌套類(lèi)和普通的內(nèi)部類(lèi)還有一個(gè)區(qū)別:普通內(nèi)部類(lèi)不能有static數(shù)據(jù)和static 屬性,也不能包含嵌套類(lèi),但嵌套類(lèi)可以。而嵌套類(lèi)不能聲明為private,一般聲明為 public,方便調(diào)用。、匿名內(nèi)部類(lèi)有時(shí)候我為了免去給內(nèi)部類(lèi)命名,便傾向于使用匿名內(nèi)部類(lèi),因?yàn)樗鼪](méi)有名字。 匿名內(nèi)部類(lèi)是不能加訪問(wèn)修飾符的。要注意的是,new匿名類(lèi),這個(gè)類(lèi)是要先定義的,5、內(nèi)部類(lèi)的繼承內(nèi)部類(lèi)的繼承,是指內(nèi)部類(lèi)被繼承,普通類(lèi)extents內(nèi)部類(lèi)。public class Example (EnclosingOneeo=new EnclosingOne();public class

13、 InsideOne)A、InsideOneei=new eo.InsideOne();B、InsideOneei=EnclosingOne. newInsideOne();C、InsideOneei=new EnclosingOne. InsideOne();D、 EnclosingOne.InsideOneei=eo. newInsideOne();解析:不解釋(InsideOne ins = eo. new不sideOne ()也可以) 34、以下哪些是關(guān)于完全封裝的正確描述?A、所有的變量都是私有的B、所有的方法都是私有的C、只有通過(guò)提供的方法才能訪問(wèn)類(lèi)屬性D、通過(guò)方法和變量名均可訪問(wèn)

14、屬性解釋?zhuān)鹤兞慷际撬接械?,封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義 的接口。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、 封裝的對(duì)象,這些對(duì)象通過(guò)一個(gè)受保護(hù)的接口訪問(wèn)其他對(duì)象。封裝是一種信息隱藏技術(shù), 在java中通過(guò)關(guān)鍵字private, protected和public實(shí)現(xiàn)封裝。什么是封裝?封裝把 對(duì)象的所有組成局部組合在一起,封裝定義程序如何弓I用對(duì)象的數(shù)據(jù),封裝實(shí)際上使用 方法將類(lèi)的數(shù)據(jù)隱藏起來(lái),控制用戶(hù)對(duì)類(lèi)的修改和訪問(wèn)數(shù)據(jù)的程度。適當(dāng)?shù)姆庋b可以 讓程式碼更容易理解和維護(hù),也加強(qiáng)了程式碼的平安性。優(yōu)點(diǎn):L良好的封裝能夠減少耦合。.類(lèi)內(nèi)部的結(jié)構(gòu)可以自

15、由修改。.可以對(duì)成員變量進(jìn)行更精確的控制。.隱藏信息,實(shí)現(xiàn)細(xì)節(jié)。35、請(qǐng)選擇所有的正確答案 A、在接口中定義的方法默認(rèn)為private方法B、在接口中定義的變量默認(rèn)為public、static、final的C、一個(gè)接口可以繼承多個(gè)接口D、關(guān)鍵字implements代表接口的繼承關(guān)系接口中每一個(gè)方法也是隱式抽象的,接口中的方法會(huì)被隱式的指定為publicabstract (只能是public abstract,其他修飾符都會(huì)報(bào)錯(cuò))。接口中可以含有變量,但是接口中的變量會(huì)被隱式的指定為public static final變量(并且只能是public,用private修飾會(huì)報(bào)編譯錯(cuò)誤。接口中的方法

16、是不能在接口中實(shí)現(xiàn)的,只能由實(shí)現(xiàn)接口的類(lèi)來(lái)實(shí)現(xiàn)接口中 的方法。36、以下哪些描述是正確的? A、native關(guān)鍵字說(shuō)明修飾的方法是由其他非Java語(yǔ)言編寫(xiě)的B、能夠出現(xiàn)在Java源文件中import語(yǔ)句前的只有注釋語(yǔ)句C、接口中定義的方法默認(rèn)是public和abstract的,不能被private或protected修飾D、構(gòu)造器只能被public或protected修飾解析:一個(gè)NativeMethod就是一個(gè)java調(diào)用非java代碼的接口。一個(gè)NativeMethod是這樣一個(gè)java的方法:該方法的實(shí)現(xiàn)由非java語(yǔ)言實(shí)現(xiàn),比方C。構(gòu)造方法有4種修飾,public, protected

17、.默認(rèn)、privateo public的構(gòu)造方法你可以用A a=new A();這樣來(lái)創(chuàng)立對(duì)象而protected、默認(rèn)修飾的構(gòu)造方法你只能 在這個(gè)類(lèi)里進(jìn)行創(chuàng)立該對(duì)象。private的就不能new來(lái)創(chuàng)立對(duì)象了。構(gòu)造方法本來(lái)就 是為了方便在其他類(lèi)創(chuàng)立不同的對(duì)象,所以構(gòu)造方法一般用public修飾,protected. 默認(rèn)修飾符很少見(jiàn)。而private基本不用來(lái)修飾構(gòu)造方法。37、以下哪些關(guān)于構(gòu)造器的描述是正確的A、子類(lèi)可以繼承父類(lèi)的構(gòu)造器B、如果沒(méi)有編寫(xiě)構(gòu)造器,編譯器會(huì)自動(dòng)為類(lèi)提供一個(gè)無(wú)參的默認(rèn)構(gòu)造器C、構(gòu)造器都沒(méi)有返回值D、構(gòu)造器可以拋出異常解析:子類(lèi)不能繼承父類(lèi)的構(gòu)造方法,更不能覆蓋父類(lèi)的

18、構(gòu)造方法。因此,子類(lèi)如果想 使用父類(lèi)的構(gòu)造方法,必須在子類(lèi)的構(gòu)造方法中使用,而且必須使用關(guān)鍵字super來(lái)表 示,而且super必須是子類(lèi)構(gòu)造方法中的頭一條語(yǔ)句。38、給出下面的代碼段:public class Base int w, x, y , z;public Base(inta, int b) x=a; y=b;public Base(int a, int b, int c, int d) / assignment x=a, y=b w=d;z=c;在代碼說(shuō)明 assignment x=a, y=b處寫(xiě)入如下哪幾個(gè)代碼是正確的?(A、Base (a, b);B、x二a, y二b;C、x

19、=a; y=b;D、this (a, b);解析:構(gòu)造函數(shù)之間的調(diào)用不可以直接調(diào)用,需要用this來(lái)代替;例如:this (a, b);39、以下關(guān)于方法覆蓋描述正確的有A、覆蓋的方法和被覆蓋的方法必須具有相同的方法名、參數(shù)列表和返回類(lèi)型B、覆蓋的方法的訪問(wèn)范圍不能比被覆蓋的方法訪問(wèn)范圍小C、覆蓋的方法不能拋出被覆蓋方法不能拋出的異常D、被覆蓋的方法不能被private修飾符修飾解析:重寫(xiě)和重載的區(qū)別:.重寫(xiě)必須繼承,重載不用。.重寫(xiě)的方法名,參數(shù)數(shù)目相同,參數(shù)類(lèi)型兼容,重載的方法名相同,參數(shù)列表不 同。.重寫(xiě)的方法修飾符大于等于父類(lèi)的方法,重載和修飾符無(wú)關(guān)。.重寫(xiě)不可以拋出父類(lèi)沒(méi)有拋出的一般

20、異常,可以拋出運(yùn)行時(shí)異常40、現(xiàn)有一下代碼:protected void method (int x) .,以下哪些有關(guān)覆蓋該方法 的描述是正確的?|A、覆蓋的方法必須采用int型作為唯一個(gè)一個(gè)參數(shù)B、覆蓋的方法必須返回類(lèi)型為voidC、覆蓋的方法可以被private修飾符修飾D、覆蓋的方法可以返回任何類(lèi)型的值解析:同上題41、現(xiàn)有以下代碼:public class MethodOverpublic void setVar(inta, intb, float c) )以下哪些是滿足setVar方法的正確重載形式?,A、private void setVar(inta, floatc, int

21、b) B、protected void setVar(inta, intb, float d) C、public intsetVar(inta, floatc, int b) return a;D、public intsetVar (inta, float c) return a;解析:方法名相同,參數(shù)不同42、現(xiàn)有以下代碼,請(qǐng)問(wèn)該程序的運(yùn)行結(jié)果是什么 class A protected intmethod()return 0;A、編譯失敗, B、編譯失敗, 見(jiàn)的C、編譯失敗, D、編譯失敗, 解析:同39題class B extends A intmethod () return 0;因?yàn)楦?/p>

22、蓋方法的訪問(wèn)范圍不能比被覆蓋的方法更窄因?yàn)轭?lèi)A中的method。方法聲明為protected,因此對(duì)其子類(lèi)都是不可 如果將第7行加上public修飾符,可編譯通過(guò)如果將第7行加上pritected修飾符,可編譯通過(guò)43、現(xiàn)有以下代碼:interface W class Z implements W class X extends Z )class Y extends Z 以下哪些代碼段是正確的? A、X x=new X();y二new Y ();Z z=new Z ();y= (Y)x;B、X x=new X();y=new Y ();Z z二new Z ();x=(X)y;C、X x=new

23、 X();y=new Y ();Z z=new Z ();z=(Z)x;D、X x=new X();y=new Y ();Z z=new Z ();W w= (W) x;解析:父類(lèi)對(duì)象可以引用子類(lèi)對(duì)象接口可以弓I用實(shí)現(xiàn)類(lèi)的對(duì)象(包括子類(lèi))44、有關(guān)匿名內(nèi)部類(lèi)描述正確的有A、匿名內(nèi)部類(lèi)沒(méi)有顯式構(gòu)造器B、匿名內(nèi)部類(lèi)可以實(shí)現(xiàn)接口C、匿名內(nèi)部類(lèi)可以繼承非final類(lèi)D、匿名內(nèi)部類(lèi)可以同時(shí)實(shí)現(xiàn)接口和繼承非final類(lèi)解析:匿名內(nèi)部類(lèi)沒(méi)有顯示構(gòu)造器。內(nèi)部類(lèi)可以同時(shí)繼承和實(shí)現(xiàn)接口,而匿名內(nèi)部類(lèi)只可以繼承或者實(shí)現(xiàn)接口45、以下哪些類(lèi)型的變量可以被一個(gè)內(nèi)部類(lèi)訪問(wèn)? A、所有static變量B、所有final變量

24、C、所有的實(shí)例成員變量(成員變量)D、只有final靜態(tài)變量解析:成員內(nèi)部類(lèi)不可以訪問(wèn)其他類(lèi)中方法的final常量46、以下關(guān)于內(nèi)部類(lèi)的描述哪些是正確的A、定義在內(nèi)部類(lèi)中的變量不能被static修飾符修飾,除非內(nèi)部類(lèi)本身是靜態(tài)的B、定義在類(lèi)中非方法中的內(nèi)部類(lèi),可以訪問(wèn)外部類(lèi)的所有變量,而不管變量的訪問(wèn) 控制聲明C、一個(gè)內(nèi)部類(lèi)實(shí)際上是外部類(lèi)的子類(lèi)D、內(nèi)部類(lèi)可以被private修飾符修飾解析:內(nèi)部類(lèi)和外部類(lèi)聯(lián)系:內(nèi)部類(lèi)可以訪問(wèn)外部類(lèi)所有的方法和屬性,如果內(nèi)部類(lèi)和 外部類(lèi)有相同的成員方法和成員屬性,內(nèi)部類(lèi)的成員方法調(diào)用要優(yōu)先于外部類(lèi)即內(nèi)部類(lèi) 的優(yōu)先級(jí)比擬高(只限于類(lèi)內(nèi)部,在主方法內(nèi),內(nèi)部類(lèi)對(duì)象不能訪

25、問(wèn)外部類(lèi)的成員方法 和成員屬性),外部類(lèi)只能訪問(wèn)內(nèi)部類(lèi)的靜態(tài)常量或者通過(guò)創(chuàng)立內(nèi)部類(lèi)來(lái)訪問(wèn)內(nèi)部類(lèi)的 成員屬性和方法,內(nèi)部類(lèi)定義的靜態(tài)常量可以全局訪問(wèn)47、abstract class和 interface有什么區(qū)別聲明方法的存在而不去實(shí)現(xiàn)它的類(lèi)被叫做抽象類(lèi)(abstract class),它用于要?jiǎng)?chuàng) 建一個(gè)表達(dá)某些基本行為的類(lèi),并為該類(lèi)聲明方法,但不能在該類(lèi)中實(shí)現(xiàn)該類(lèi)的情況。 不能創(chuàng)立abstract類(lèi)的實(shí)例。然而可以創(chuàng)立一個(gè)變量,其類(lèi)型是一個(gè)抽象類(lèi),并讓它 指向具體子類(lèi)的一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract類(lèi)的子類(lèi) 為它們父類(lèi)中的所有抽象方法提供實(shí)現(xiàn),否那么它們也是抽象

26、類(lèi)為。取而代之,在子類(lèi)中 實(shí)現(xiàn)該方法。知道其行為的其它類(lèi)可以在類(lèi)中實(shí)現(xiàn)這些方法接口(interface)是抽象類(lèi)的變體。在接口中,所有方法都是抽象的。多繼承性可通 過(guò)實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒(méi)有一個(gè)有程序體。接口只 可以定義static final成員變量。接口的實(shí)現(xiàn)與子類(lèi)相似,除了該實(shí)現(xiàn)類(lèi)不能從接口 定義中繼承行為。當(dāng)類(lèi)實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方 法。然后,它可以在實(shí)現(xiàn)了該接口的類(lèi)的任何對(duì)象上調(diào)用接口的方法。由于有抽象類(lèi), 它允許使用接口名作為弓I用變量的類(lèi)型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口 類(lèi)型或從接口類(lèi)型轉(zhuǎn)換,instan

27、ceof運(yùn)算符可以用來(lái)決定某對(duì)象的類(lèi)是否實(shí)現(xiàn)了接口。 抽象類(lèi)與接口都用于抽象,但是抽象類(lèi)(JAVA中)可以有自己的局部實(shí)現(xiàn),而接口那么完全 是一個(gè)標(biāo)識(shí)(同時(shí)有多重繼承的功能)o1、抽象類(lèi)和接口都不能直接實(shí)例化,如果要實(shí)例化,抽象類(lèi)變量必須指向?qū)崿F(xiàn)所 有抽象方法的子類(lèi)對(duì)象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類(lèi)對(duì)象。2、抽象類(lèi)要被子類(lèi)繼承,接口要被類(lèi)實(shí)現(xiàn)。3、接口只能做方法聲明,抽象類(lèi)中可以做方法聲明,也可以做方法實(shí)現(xiàn)4、接口里定義的變量只能是公共的靜態(tài)的常量,抽象類(lèi)中的變量是普通變量。5、抽象類(lèi)里的抽象方法必須全部被子類(lèi)所實(shí)現(xiàn),如果子類(lèi)不能全部實(shí)現(xiàn)父類(lèi)抽象方法, 那么該子類(lèi)只能是抽象類(lèi)。同樣,一

28、個(gè)實(shí)現(xiàn)接口的時(shí)候,如不能全部實(shí)現(xiàn)接口方法,那 么該類(lèi)也只能為抽象類(lèi)。6、抽象方法只能申明,不能實(shí)現(xiàn),接口是設(shè)計(jì)的結(jié)果,抽象類(lèi)是重構(gòu)的結(jié)果7、抽象類(lèi)里可以沒(méi)有抽象方法8、如果一個(gè)類(lèi)里有抽象方法,那么這個(gè)類(lèi)只能是抽象類(lèi)9、抽象方法要被實(shí)現(xiàn),所以不能是靜態(tài)的,也不能是私有的。10、接口可繼承接口,并可多繼承接口,但類(lèi)只能單根繼承。.抽象類(lèi)和接口都是用來(lái)抽象具體對(duì)象的.但是接口的抽象級(jí)別最高.抽象類(lèi)可以有具體的方法和屬性,接口只能有抽象方法和不可變常量.抽象類(lèi)主要用來(lái)抽象類(lèi)別,接口主要用來(lái)抽象功能.4、抽象類(lèi)中,且不包含任何實(shí)現(xiàn),派生類(lèi)必須覆蓋它們。接口中所有方法都必須是未 實(shí)現(xiàn)的。當(dāng)你關(guān)注一個(gè)事物的

29、本質(zhì)的時(shí)候,用抽象類(lèi);當(dāng)你關(guān)注一個(gè)操作的時(shí)候,用接口。抽象類(lèi)的功能要遠(yuǎn)超過(guò)接口,但是,定義抽象類(lèi)的代價(jià)高。因?yàn)楦呒?jí)語(yǔ)言來(lái)說(shuō)(從實(shí)際 設(shè)計(jì)上來(lái)說(shuō)也是)每個(gè)類(lèi)只能繼承一個(gè)類(lèi)。在這個(gè)類(lèi)中,你必須繼承或編寫(xiě)出其所有子 類(lèi)的所有共性。雖然接口在功能上會(huì)弱化許多,但是它只是針對(duì)一個(gè)動(dòng)作的描述。而且你可 以在一個(gè)類(lèi)中同時(shí)實(shí)現(xiàn)多個(gè)接口。在設(shè)計(jì)階段會(huì)降低難度的。48、abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是 synchronized都不可以,因?yàn)閍bstract申明的方法是要求子類(lèi)去實(shí)現(xiàn)的,abstract只是告訴你 有這樣一個(gè)接口,你要去實(shí)現(xiàn),至于你的具體

30、實(shí)現(xiàn)可以是native和synchronized,也 可以不是,抽象方法是不關(guān)心這些事的,所以寫(xiě)這兩個(gè)是沒(méi)有意義的。然后,static 方法是不會(huì)被覆蓋的,而abstract方法正是要子類(lèi)去覆蓋它,所以也是沒(méi)有意義的。 所以,總的來(lái)說(shuō),就是java語(yǔ)法不允許你這樣做,事實(shí)上,也沒(méi)有意義這樣做。49、面向?qū)ο蟮奶卣饔心男┓矫娌庞上?.抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地注意與當(dāng)前 目標(biāo)有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中的一局部,暫時(shí) 不用局部細(xì)節(jié)。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽象。.繼承:繼承是一種聯(lián)結(jié)類(lèi)的層次模型,并且允許和鼓勵(lì)類(lèi)的重用,它

31、提供了一種明確表 述共性的方法。對(duì)象的一個(gè)新類(lèi)可以從現(xiàn)有的類(lèi)中派生,這個(gè)過(guò)程稱(chēng)為類(lèi)繼承。 新類(lèi)繼承了原始類(lèi)的特性,新類(lèi)稱(chēng)為原始類(lèi)的派生類(lèi)(子類(lèi)),而原始類(lèi)稱(chēng)為新 類(lèi)的基類(lèi)(父類(lèi))。派生類(lèi)可以從它的基類(lèi)那里繼承方法和實(shí)例變量,并且類(lèi)可 以修改或增加新的方法使之更適合特殊的需要。.封裝:封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的界面。面向?qū)ο?計(jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對(duì)象, 這些對(duì)象通過(guò)一個(gè)受保護(hù)的接口訪問(wèn)其他對(duì)象。.多態(tài)性:多態(tài)性是指允許不同類(lèi)的對(duì)象對(duì)同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和 包含多態(tài)性。多態(tài)性語(yǔ)言具有靈活、抽象、行為共享

32、、代碼共享的優(yōu)勢(shì),很好的 解決了應(yīng)用程序函數(shù)同名問(wèn)題。50、作用域public, private, protected,以及不寫(xiě)時(shí)的區(qū)別 區(qū)別如下:作用域當(dāng)前類(lèi)同一package子孫類(lèi)其他 packagepublicVVVVprotected VVVXdefault VVXXprivateVXXX51、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類(lèi)型如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱(chēng)和參數(shù),我們說(shuō)該方法被重寫(xiě) (Overriding) o子類(lèi)的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類(lèi)中的定義,對(duì)它而言,父類(lèi) 中的定義如同被屏蔽了。如果在一個(gè)類(lèi)中定義了多

33、個(gè)同名的方法,它們或有不同的 參數(shù)個(gè)數(shù)或有不同的參數(shù)類(lèi)型,那么稱(chēng)為方法的重載(Overloading)。Overloaded的方 法是可以改變返回值的類(lèi)型52、以下代碼能夠正常運(yùn)行?如果不能,指出代碼錯(cuò)誤之處,如果能,之處運(yùn)行結(jié)果。 public class Example public static intnum = 0;String name;static System. out. printin(num + :code A);)(System. out. printin(num + :code B);num+;public Example(String name) System, out

34、. printin (num + :構(gòu)造器 : + name); this, name = name;4、給出以下代碼,請(qǐng)問(wèn)以下哪個(gè)描述是正確的事Public XXXX extends somethingl, something2A、如果XXXX是一個(gè)接口,something1和something2取消掉,那么代碼段合法B、如果XXXX是一個(gè)類(lèi),something1和something2均是接口,那么代碼段合法C、如果XXXX、somethingl和something2均是接口,那么代碼段合法D、因?yàn)镴ava語(yǔ)言不支持多繼承機(jī)制,所以代碼段不合法解析:java接口可以繼承多個(gè)接口5、請(qǐng)問(wèn)以下哪

35、個(gè)程序代碼表達(dá)了對(duì)象之間的is a關(guān)系?|public interface Color public class Shape private Color color;public interface Component public class Cpmtaomer implements Component private Component children;public class Speciespublic class Animal private Species species;)public class Animalpublic interface Species private Sp

36、ecies species;)解析:isa關(guān)系為接口實(shí)現(xiàn)6、給出以下代碼,該程序的執(zhí)行結(jié)果是沖interface Base int k = 0;public class Example implements Base public static void main(String args) inti;Example exm = new Example();i = exm. k;i = Example, k;i = Base, k;System, out. printin(i);num+;public static void main(String args) Example people =

37、new Example (,zTom,z);Example people2 = new Example(Jim); )能正常運(yùn)行,輸出:0:code A0:code B1:構(gòu)造器:Tom2: code B3:構(gòu)造器:Jim代碼塊執(zhí)行順序;靜態(tài)代碼塊-main -構(gòu)造代碼塊-構(gòu)造器53、創(chuàng)立一個(gè)具備lazy loading并且具備良好線程特性的單例類(lèi)class Singlelprivatestatic Singlel s = null;private Singlel();static Singlel si = new Singlel();publicstatic Singlel getlnsta

38、nce()synchronized (Singlel.class) if(s=null)s = new Singlel();returns;A、B、C、D、無(wú)內(nèi)容輸出代碼編譯失敗代碼運(yùn)行出現(xiàn)異常信息打印輸出0解析:接口中的默認(rèn)為static常量7、給出下面代碼,請(qǐng)問(wèn)該程序的運(yùn)行結(jié)果是什么1C interface Aint x=0;A()x=5;A(int s) x=s; 1 )A、B、C、D、編譯不通過(guò), 編譯不通過(guò), 編譯不通過(guò), 編譯不通過(guò),因?yàn)榻涌谥械臉?gòu)造器必須用pub 1 ic修飾 因?yàn)榻涌谥胁荒艹^(guò)一個(gè)以上的構(gòu)造器 因?yàn)榻涌谥胁荒艽嬖跇?gòu)造器因?yàn)榻涌诿仨毘^(guò)1個(gè)字符解析:接口之中不可

39、以存在構(gòu)造器8、以下代碼的執(zhí)行結(jié)果是1public class Example String s =Outer”;public static void main(String args) S2 s2 = new S2 ();s2. display ();)class SI String s = S1; void display() System, out. printin (s);)class S2 extends SI String s = S2;)A、SIB、S2nullOuter解析:此題中,由于子類(lèi)S2中未定義display方法,因此在子類(lèi)S2實(shí)例上調(diào)用的display 方法是繼承自父

40、類(lèi)的S1中的 由于display方法只能對(duì)同類(lèi)上的成員變量s進(jìn)行訪問(wèn), 因此打印輸出S19、關(guān)于構(gòu)造器說(shuō)法錯(cuò)誤的選項(xiàng)是|A、構(gòu)造器不屬于類(lèi)成員方法,因此構(gòu)造器不能被繼承 B、只有構(gòu)造器才能擁有和類(lèi)名相同的方法名 C、一個(gè)類(lèi)可以擁有多個(gè)重載的構(gòu)造器D、在子類(lèi)中調(diào)用父類(lèi)的非默認(rèn)構(gòu)造器,必須使用super (.)語(yǔ)句,而且該語(yǔ)句 必須位于子類(lèi)構(gòu)造器的第一行 解析:普通類(lèi)成員方法也可以和類(lèi)同名,但是會(huì)造成隱患,不建議這么命名10、以下哪個(gè)針對(duì)默認(rèn)無(wú)參構(gòu)造器描述是正確的事A、均是public構(gòu)造器B、均無(wú)訪問(wèn)修飾符C、均與所屬類(lèi)訪問(wèn)修飾符一致D、由編譯器決定解析:和方法一樣,構(gòu)造器可以有任何訪問(wèn)的修飾:

41、public, protected, private或 者沒(méi)有修飾(通常被package和friendly調(diào)用),不同于方法的是,構(gòu)造器不能有以 下非訪問(wèn)性質(zhì)的修飾:abstract, final, native, static,或者 synchronized。11、當(dāng)一個(gè)類(lèi)的所有構(gòu)造器均為私有的,以下哪個(gè)描述是正確的cA、不能被其他類(lèi)實(shí)例化B、不能被其他類(lèi)繼承C、既不能被其他類(lèi)實(shí)例化,也不能被其他類(lèi)繼承D、該類(lèi)必須被final修飾解析:使用private關(guān)鍵字聲明的構(gòu)造函數(shù)。由于類(lèi)的構(gòu)造函數(shù)時(shí)私有的,所以此類(lèi)不 能被實(shí)例化,同時(shí)也不能被繼承。EffectiveJava第三條:用私有構(gòu)造器或者

42、枚舉 強(qiáng)化Singleton屬性。所謂Singleton屬性是指僅僅被實(shí)例化一次的類(lèi)。第四條:通過(guò) 私有構(gòu)造器強(qiáng)化不可實(shí)例化的能力O12、以下哪些修飾符可以用于構(gòu)造器沖finalstaticsynchronizedD、以上選項(xiàng)均不行 解析:同10題13、以下給出的代碼段運(yùn)行結(jié)果是? | public class Example intmaxElements;void Example () maxElements = 100;System. out. printin(maxElements);public Example(inti) maxElements = i;System. out. pr

43、intin(maxElements);)public static void main(String args) Example a=new Example();Example b=new Example(999);)A、打印輸出100 999B、打印輸出999 100C、代碼編譯失敗D、代碼編譯成功但運(yùn)行是輸出異常信息解析:普通方法也可以使用類(lèi)名做方法名,而一旦提供了任意版本的構(gòu)造器,編譯器將 不會(huì)再提供默認(rèn)無(wú)參構(gòu)造器,因此此題中不存在無(wú)參的構(gòu)造器,構(gòu)建實(shí)例失敗 題目中的voidExampleO就是將原本類(lèi)中默認(rèn)的無(wú)參構(gòu)造方法覆蓋,導(dǎo)致類(lèi)中沒(méi)有可用 無(wú)參構(gòu)造方法。14、以下程序的運(yùn)行結(jié)果是|

44、class Aclass Dogprivate String name;private int age;public int step;Dog (String s, int a)(name=s;age=a;step=0;public void run (Dog fast)fast. step+;)public static void main (String args)(A a=new A();Dog d=a. new Dog (Tom”, 3);d. step=25;d. run (d);System. out. println(d. step);A、25B、26C、編譯不通過(guò)D、輸出異常信

45、息 解析:不解釋15、如下代碼:|class ExampleString str;public Example() str= example”;public Example(String s)str=s;9: 10:class Demo extends Example11:)12:public class Test public void f () Example ex = new Example (Good);Demo d = new Demo (Good);16: )哪句語(yǔ)句會(huì)導(dǎo)致錯(cuò)誤?line6linelOline14linel5解析:構(gòu)造方法不能被繼承,因此Demo類(lèi)不存在帶有一個(gè)字符

46、串參數(shù)的構(gòu)造方法16、關(guān)于重載和覆蓋,以下說(shuō)法錯(cuò)誤的選項(xiàng)是|A、重載方法的返回值、訪問(wèn)修飾符以及拋出的異常都不是重載方法判斷的決定因素 B、一個(gè)靜態(tài)方法既可以被重載為一個(gè)靜態(tài)方法,也可以被重載為一個(gè)非靜態(tài)方法 C、一個(gè)靜態(tài)方法既可以被覆蓋為一個(gè)靜態(tài)方法,也可以被覆蓋為一個(gè)非靜態(tài)方法D、覆蓋的方法返回值必須和源方法返回值類(lèi)型保持賦值兼容,訪問(wèn)權(quán)限不能小于源 方法,只能拋出源方法異?;蛟捶椒ó惓5淖宇?lèi)解析:靜態(tài)方法只能覆蓋為靜態(tài)方法PS :重載與覆蓋(重寫(xiě))的區(qū)別:重載一般在同一個(gè)類(lèi)中發(fā)生,方法名字相同但參數(shù)類(lèi)型與個(gè)數(shù)不同,返回類(lèi)型與修 飾符也可以不同。方法重寫(xiě)發(fā)生在父類(lèi)與子類(lèi)之間,兩個(gè)類(lèi)存在繼承

47、關(guān)系,方法重寫(xiě)時(shí)方法的定義 (修飾符,返回類(lèi)型,參數(shù)列表)必須相同,只是方法體(方法實(shí)現(xiàn))不同17、現(xiàn)有基類(lèi)中的一個(gè)方法:voidmethod(),請(qǐng)問(wèn)以下哪些是子類(lèi)中覆蓋該方法的正 確形式? |A、void method() int method()return 0;void method(inti)private void method()解析:解析同16題18、現(xiàn)有如下代碼:class Super public float getNumO return 3. Of;)class Sub extends Super /空白處)請(qǐng)問(wèn)以下哪個(gè)語(yǔ)句放置在注釋的空白處會(huì)引起編譯錯(cuò)誤?|A、publ

48、ic float getNumO return 4. Of;B、public void getNumO C、 public void getNum(double d)D、public double getNum(float d) return 4. 0;) 解析:19、以下代碼的執(zhí)行結(jié)果是什么? public class Example inti = 100;public void print() System, out. println(50);public static void main(String args) Example a = new A ();System, out. printin (a. i);a. print ();)class A extends Example inti

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論