資源描述:
《java提高篇之抽象類與接口-編程開(kāi)發(fā)技術(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、java提高篇Z抽象類與接口-編程開(kāi)發(fā)技術(shù)java提高篇之抽象類與接口原文出處:chenssy接口和內(nèi)部類為我們提供了一種將接口與實(shí)現(xiàn)分離的更加結(jié)構(gòu)化的方法。抽象類與接口是java語(yǔ)言中對(duì)抽象概念進(jìn)行定義的兩種機(jī)制,正是由于他們的存在才賦予java強(qiáng)大的面向?qū)ο蟮哪芰?。他們兩者Z間對(duì)抽象概念的支持有很大的相似,其至可以互換,但是也有區(qū)別。一、抽象類我們都知道在而向?qū)ο蟮念I(lǐng)域一切都是對(duì)象,同時(shí)所冇的對(duì)彖都是通過(guò)類來(lái)描述的,但是并不是所有的類都是來(lái)描述對(duì)象的。如果一個(gè)類沒(méi)有足夠的信息來(lái)描述一個(gè)具體的對(duì)象,而需要其他具體的類
2、來(lái)支撐它,那么這樣的類我們稱它為抽象類。比如newAnimal(),我們都知道這個(gè)是產(chǎn)生一個(gè)動(dòng)物Animal對(duì)象,但是這個(gè)Animal體長(zhǎng)成什么樣了我們并不知道,它沒(méi)有一個(gè)具體動(dòng)物的概念,所以他就是一個(gè)抽象類,需要一個(gè)具體的動(dòng)物,如狗、貓來(lái)對(duì)它進(jìn)行特定的描述,我們才知道它長(zhǎng)成啥樣。在面向?qū)ο箢I(lǐng)域市于抽象的概念在問(wèn)題領(lǐng)域沒(méi)有對(duì)應(yīng)的具體概念,所以用以表征抽象概念的抽象類是不能實(shí)例化的。同時(shí),抽象類體現(xiàn)了數(shù)據(jù)抽象的思想,是實(shí)現(xiàn)多態(tài)的一種機(jī)制。它定義了一組抽象的方法,至于這組抽象方法的具體表現(xiàn)形式冇派生類來(lái)實(shí)現(xiàn)。同時(shí)抽彖類捉供
3、了繼承的概念,它的出發(fā)點(diǎn)就是為了繼承,否則它沒(méi)有存在的任何意義。所以說(shuō)定義的抽象類一定是用來(lái)繼承的,同吋在一個(gè)以抽象類為節(jié)點(diǎn)的繼承關(guān)系等級(jí)鏈中,葉子節(jié)點(diǎn)一定是具體的實(shí)現(xiàn)類。(不知這樣理解是否有錯(cuò)?。?!高手指點(diǎn)…?)在使用抽象類時(shí)需要注意幾點(diǎn):1、抽象類不能被實(shí)例化,實(shí)例化的工作應(yīng)該交由它的子類來(lái)完成,它只需要有一個(gè)引用即可。2、抽象方法必須由子類來(lái)進(jìn)行重寫。3、只要包含一個(gè)抽象方法的抽象類,該方法必須要定義成抽象類,不管是否還包含有其他方法。4、抽象類屮可以包含具體的方法,當(dāng)然也可以不包含抽象方法。5、子類屮的抽象方法
4、不能與父類的抽象方法同名。6、abstract不能與final并列修飾同一個(gè)類。7、abstract不能與private^static^final或native并列修飾同一個(gè)方法。、??????實(shí)例:定義一個(gè)抽彖動(dòng)物類Animal,提供抽彖方法叫cryO,貓、狗都是動(dòng)物類的子類,由于cry()為抽象方法,所以Cat、Dog必須要實(shí)現(xiàn)cry()方法。如下:publicabstractclassAnimal{publicabstractvoidcry();}publicclassCatextendsAnimal{?Over
5、ridepublicvoidcry(){System,out.printl貓叫:口苗口苗???");}}publicclassDogextendsAnimal{?Overridepublicvoidcry(){System,out.printin(〃狗叫:汪汪???〃);}publicclassTest{publicstaticvoidmain(String[]args){Animalal=newCeit();Animala2=newDog();al.cry();a2?cry();}Output:貓叫:口苗口苗???狗
6、叫:汪汪???創(chuàng)建抽象類和抽象方法非常有用,因?yàn)樗麄兛梢允诡惖某橄笮悦鞔_起來(lái),并告訴用戶和編譯器打算怎樣使用他們?抽象類還是有用的重構(gòu)器,因?yàn)樗鼈兪刮覀兌R院苋菀椎貙⒐卜椒ㄑ刂^承層次結(jié)構(gòu)向上移動(dòng)。(From:Thinkinjava)二、接口接口是一種比抽彖類更加抽彖的“類”。這里給“類”加引號(hào)是我找不到更好的詞來(lái)表示,但是我們要明確一點(diǎn)就是,接口木身就不是類,從我們不能實(shí)例化一個(gè)接口就口J以看出。如newRunneibleO;肯定是錯(cuò)誤的,我們只能new它的實(shí)現(xiàn)類。接口是用來(lái)建立類與類之間的協(xié)議,它所提供的只是一種
7、形式,而沒(méi)有具休的實(shí)現(xiàn)。同時(shí)實(shí)現(xiàn)該接口的實(shí)現(xiàn)類必須要實(shí)現(xiàn)該接口的所有方法,通過(guò)使用implements關(guān)鍵字,他農(nóng)示該類在遵循某個(gè)或某組特定的接口,同時(shí)也農(nóng)示著"interface只是它的外貌,但是現(xiàn)在需要聲明它是如何工作的”。接口是抽象類的延伸,javaT保證數(shù)據(jù)安全是不能多重繼承的,也就是說(shuō)繼承只能存在一個(gè)父類,但是接口不同,一個(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)接口,不管這些接口之間有沒(méi)有關(guān)系,所以接口彌補(bǔ)了抽象類不能多重繼承的缺陷,但是推薦繼承和接口共同使用,因?yàn)檫@樣既可以保證數(shù)據(jù)安全性又可以實(shí)現(xiàn)多重繼承。在使用接口過(guò)程中需要
8、注意如下幾個(gè)問(wèn)題:1、個(gè)Intcrfacc的方所有法訪問(wèn)權(quán)限自動(dòng)被聲明為public。確切的說(shuō)只能為public,當(dāng)然你可以顯示的聲明為protected、private,但是編譯會(huì)出錯(cuò)!2、接口中可以定義“成員變量”,或者說(shuō)是不可變的常量,因?yàn)榻涌谥械摹俺蓡T變量”會(huì)自動(dòng)變?yōu)闉閜ublicstaticfinal??梢酝ㄟ^(guò)類命名直接