資源描述:
《面向?qū)ο蟮母呒?jí)特性》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第六章面向?qū)ο蟮母呒?jí)特性6.1.1接口的引入JAVA的單重繼承機(jī)制使得程序結(jié)構(gòu)簡(jiǎn)單清晰,但只靠單重繼承機(jī)制有時(shí)不能解決某些復(fù)雜問(wèn)題。6.1接口交通工具車輛飛機(jī)船舶汽車噴氣飛機(jī)柴油機(jī)船劃船燃油1.接口的特點(diǎn):1)接口使用關(guān)鍵字interface來(lái)定義,而不是class2)接口中定義的變量全部是靜態(tài)最終變量3)接口中沒(méi)有定義構(gòu)造方法,而且定義的方法都是抽象方法(只提供方法的定義,而不實(shí)現(xiàn))4)接口采用多重繼承機(jī)制,而不是類的單重繼承機(jī)制6.1.1接口的引入2.接口的作用:1)用來(lái)實(shí)現(xiàn)類似多重繼承功能的一種結(jié)構(gòu)2)接口是一個(gè)標(biāo)準(zhǔn)(約定),是為了規(guī)范實(shí)現(xiàn)類,因此可以不用管具體實(shí)現(xiàn)類如何實(shí)現(xiàn)
2、該接口的方法6.1.1接口的引入3.接口的定義:[public]interface接口名[extends父接口1,父接口2,…]{[publicstaticfinal]typename1=value;…[publicabstract]返回值類型方法名(形參表)[throws異常名列表];}6.1.1接口的引入默認(rèn)的修飾符如果沒(méi)有,表示它是“友好”的,包內(nèi)訪問(wèn)性沒(méi)有方法體,直接以分號(hào)結(jié)束4.接口的定義舉例:publicinterfaceStack{publicstaticfinalinta=1;publicabstractvoidpush(floata,floatb);}public
3、interfaceStack{}6.1.1接口的引入1.接口的調(diào)用方法:[public]classclassNameimplements接口名{….//接口中方法的具體實(shí)現(xiàn)}6.1.2調(diào)用接口2.實(shí)現(xiàn)接口注意點(diǎn):1)一個(gè)類能實(shí)現(xiàn)多個(gè)接口,各接口之間用逗號(hào)隔開(kāi)2)一個(gè)接口可以被多個(gè)類實(shí)現(xiàn)3)一個(gè)類聲明實(shí)現(xiàn)某個(gè)接口后,必須實(shí)現(xiàn)該接口的所有方法(包括該接口的所有父接口方法),且被實(shí)現(xiàn)的方法和接口定義的方法完全一樣!4)被實(shí)現(xiàn)的方法的訪問(wèn)控制符必須顯式地使用public修飾!6.1.2調(diào)用接口舉例:6.1.2調(diào)用接口publicinterfacePlayer{voidplay();void
4、loop();voidstop();}publicclassMyclassimplementsPlayer{publicvoidplay(){//具體實(shí)現(xiàn)}publicvoidloop();{//具體實(shí)現(xiàn)}publicvoidstop();{//具體實(shí)現(xiàn)}}當(dāng)然,一個(gè)接口可以被任意多個(gè)類實(shí)現(xiàn),如:6.1.2調(diào)用接口publicclassMyOtherclassimplementsPlayer{publicvoidplay(){//具體實(shí)現(xiàn)}….}關(guān)于接口多重繼承時(shí)的實(shí)現(xiàn):該類必須實(shí)現(xiàn)子接口和其所有父接口所定義的方法6.1.2調(diào)用接口publicinterfaceFirst{void
5、play();}publicinterfaceSecondextendsFirst{voidstop();}classMyClassimplementsSecond{publicvoidplay(){…//具體實(shí)現(xiàn)}publicvoidstop(){…//具體實(shí)現(xiàn)}}注意:由于一個(gè)類實(shí)現(xiàn)一個(gè)接口時(shí)必須實(shí)現(xiàn)它的全部方法,所以在對(duì)接口進(jìn)行修改時(shí)必須特別小心!6.1.2調(diào)用接口publicinterfacePlayer{voidplay();voidloop();voidstop();voidassess();}如果新增方法定義voidassess();,則會(huì)引起所有實(shí)現(xiàn)這個(gè)接口的類都出
6、錯(cuò),這時(shí)候怎么修改最好?答案:為原接口定義一個(gè)子接口!6.1.2調(diào)用接口publicinterfacePlayerClipentendsPlayer{voidassess();}接口的定義和類的定義很相似,但是,永遠(yuǎn)不能用new操作符實(shí)例化一個(gè)接口,例如:x=newPlayer();//錯(cuò)誤!可以聲明一個(gè)接口變量,并將該變量指向一個(gè)實(shí)現(xiàn)了該接口的類的對(duì)象,例如:Playerx=newMyclass();可以通過(guò)下面語(yǔ)句判斷一個(gè)對(duì)象是否實(shí)現(xiàn)了某個(gè)接口:if(xinstanceofPlayer){….}6.1.3接口的屬性接口與類相似,通過(guò)extends關(guān)鍵字實(shí)現(xiàn)繼承,但是與類不一樣的
7、是,一個(gè)接口可以使用多個(gè)其他接口的內(nèi)容。6.1.4接口的擴(kuò)展publicinterfaceFourthextendsFirst,Second{…}注意:若兩個(gè)父接口都有一個(gè)具有相同特征的方法(名字相同,參數(shù)相同),則它們必須具有相同的返回值類型!6.1.4接口的擴(kuò)展publicinterfaceFirst{intplay(inta);}publicinterfaceSecond{intplay(intb);}思考:若現(xiàn)在要使用接口修改上次上機(jī)的程序:圖形與其子類,可以