版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
四.面向?qū)ο蠹夹g(shù)對象:everythingisobject.對象:有什么? 指對象的屬性能做什么?指對象的方法對象的屬性是自身所特有的,與其它對象沒什么關(guān)系。所以,對象的屬性是應該是私有的,對于方法,該公開的公開,該私有的私有。對象的方法是:一個對象對外的接口,所以方法非常重要。?思考:為什么要有面向?qū)ο蟮乃枷??面向?qū)ο蟮乃枷?,它符合人類對處理問題的邏輯思維方式。面向?qū)ο笫且惶兹碌乃枷敕椒?,每個對象要各司其職,各盡所長。對象與對象之間互相交互,面向?qū)ο笠卜先祟悓陀^世界的描述方式。對于對象:我們在設(shè)計的時候,一定要讓對象簡單,功能專一。要求:可復用性,弱耦合性,高內(nèi)聚性,可插入性。3.面向?qū)ο笕筇匦裕悍庋b(Encapsulation),繼承(Inheritance),多態(tài)。(Polymorphism)1.封裝(Encapsulation):A.屏蔽實現(xiàn)在細節(jié)。B.提供統(tǒng)一的用戶接口。C.提高代碼的重用性,維護性?,F(xiàn)在讓我們來討論一下:面向?qū)ο蠛兔嫦蜻^程的區(qū)別?面向?qū)ο螅合扔袑ο?,也就是?shù)據(jù)結(jié)構(gòu),后才有算法。面向過程:先有算法,而后才有數(shù)據(jù)結(jié)構(gòu)。類:(CLASS)什么是類?是一種復雜的數(shù)據(jù)類型。(語法上解釋)類是對對象的抽象。 (語義上解釋)如何來定義一個類:例:classAnimal(intage;Stringname;}這樣就定義的一個動物類,它有兩個實例變量(成員屬性),age和name。Animala=newAnimal();注:對象變量a不包含對象,它只是指向一個對象,在JAVA中,任何對象變量的值都是指向存儲在別處的對象的一個引用。這樣就定義了一個對象的引用a,它指向一個Animal對象。注:生成的對象是存在堆空間中的一塊連續(xù)空間,而變量a存的是此對象的首地址,它存在stack空間中?,F(xiàn)在,讓我們來看一下,如何申明一個方法:方法申明:修飾符返回值類型方法名(參數(shù)列表) 拋出的異常EX: publicStringfindNameById(intid)throwsException類中最特殊的方法:構(gòu)造方法:(Constructor)?構(gòu)造方法的作用:■生成一個對象的同時調(diào)用僅也調(diào)用一次相應的構(gòu)造方法■在調(diào)用構(gòu)造方法之前對象必需已經(jīng)存在?!鰳?gòu)造方法不是用來生成對象的,而是對象一旦生成,就會自動地調(diào)用構(gòu)造方法,注意:構(gòu)造方法是自動被構(gòu)造成的。?構(gòu)造方法的特點■構(gòu)造方法沒有返回值■方法名必須與類名一致■構(gòu)造方法可以重載。?生成一個對象的步驟■首先分配空間■初始化屬性(給實例變量賦默認值)■調(diào)用構(gòu)造方法注意:如果有父類,則第一步應該是:遞歸地構(gòu)造父類對象!實際上,在JAVA中,任何的類都有一基類,為Object,它是所有類的基類。所以,生成一個對象應為4步:首先遞歸地構(gòu)造父類對象,(也就是說在構(gòu)造父類對象時,也是按照上面三步進行的)?重載■含義:只要方法名相同,參數(shù)表不同,就可以構(gòu)成方法重載?!龇椒ㄖ剌d,在JAVA中,也叫:編譯時多態(tài)。(由編譯的時候來確定調(diào)用哪個方法)■重載的原則:向上就近匹配原則注意:如果只有print(doubled)方法,而要調(diào)用print(int),則編譯器會自動地就近向上匹配print(double)方法。但是反過來就不行,因為從大到小會丟失精度,所以,沒有就近向下匹配原則.關(guān)鍵字:thisThis:指當前對象的。。。有兩種用法:表示當前對象:this.age=age;=name;在調(diào)用本類的其它構(gòu)造方法時。This(參數(shù)表),注:this的這種用法只能放在第一行。方法調(diào)用:傳值,傳引用記?。涸贘AVA中,簡單類型變量一定是傳值。對象變量一這是傳引用(也就是指向?qū)ο蟮氖椎刂罚┒?繼承構(gòu)造方法不能被繼承。方法和屬性可以被繼承。子類的構(gòu)造方法會默認自動調(diào)用父類構(gòu)造方法如果父類中沒有默認的構(gòu)造方法,則子類中必須用super(參數(shù))來明確地調(diào)用父類相應的帶參構(gòu)造方法。注:super語句也必須放在第一條寫出。如:classAnimal{intage=10;}classDogextendsAnimal{intage=20;}注:子類中的age變量會遮蓋(shadow)父類中的變量age,所以,如果想在子類中訪問父類的age變量,必須使用super.age來訪問才行。?同名的子類變量會遮蓋(shadow)父類實例變量;?有了繼承,現(xiàn)在來看一下方法的覆蓋。Overwritting■覆蓋條件:?返回值類型相同?方法名相同?參數(shù)表相同?修飾符相同或者權(quán)限更寬,并不能拋出比父類更多的異常注:有一種特殊情況,在JDK5.0中,返回值類型可以是父子關(guān)系。關(guān)鍵字總結(jié):this,super在一個子類構(gòu)造方法中,會有一個隱藏的super()語句,它會自動地完成調(diào)用父類構(gòu)造方法,所以,此句可以不寫。但是,如果在子類中要調(diào)用父類帶參的構(gòu)造方法時,則必須明確地指定super(參數(shù))語句,且只能寫在第一條。。ClassAnimal(Privateintage;PublicAnimal()(}PublicAnimal(intage)(this.age=age;}}ClassDogextendsAnimal(Privateintlegs;PrivateStringname;PublicDog()(}PublicDog(intage,intlegs,Stringname)(Super(age);〃顯示地調(diào)用父類的帶參構(gòu)造方法。This.legs=legs;Ts=names;}} 好了,現(xiàn)在,到了該談論一下各種修飾符的訪問權(quán)限了。在JAVA中,一共有四種訪問修飾符,比C++多一種,defaultPrivate:私有,只限在本類成員才能訪問。Default:缺省,JAVA的默認權(quán)限,除了本類,同包的可以訪問Protected: 保護,本類,同包,還有子類都可以訪問Public: 公開,都能訪問,任何其它類。由上述可以看出,JAVA的訪問權(quán)限是越來越寬,從上至下而言。Private---->default——3protected ->public繼承原則:Li-SubstitutionPrinciple:里氏代換原則:LSP:任何使用父類的場合,都可以替換成子類,才能滿足繼承關(guān)系。例如:長方形(Rect)和正方形(Square)之間,誰也不能替換誰吧,所以說它們并不滿足LSP原則,所以不能應該使用繼承。而矩形則可以成為它們的父類。因為不論是長方形或是正方形都可以說是矩形。慎用覆蓋:意思是子類不該太多地重寫父類的方法,如果一個子類要過多地重寫類的方法,則應考慮他們是否適合繼承關(guān)系。三.代碼復用的兩種實現(xiàn):通過繼承來實現(xiàn),這是一種'白盒復用'通過組合來實現(xiàn),這是一種'黑盒復用‘如:ClassOldclass{Publicvoida(){}Publicvoidb(){}Publicvoidc(){}}ClassNewclassextendsOldclass{Publicvoida(){super.a();}}如上所述,采用繼承實現(xiàn)代碼復用,子類會擁有父類所有的方法。而實際上我們只想Newclass中只要有a()方法,而不要其它方法。但繼承的方式會暴露所有父類的方法。組合合成實現(xiàn):在新類中,定義一個Oldclass的實例變量,然后在方法體中通過Oldclass的對象來調(diào)用其方法。采用組合方式復用,可以對不需要的方法進行屏蔽。實際上,在用組合方式時,方法的調(diào)用本質(zhì)上是一種調(diào)用的委托,在新類中的a()方法,本質(zhì)上是通過舊對象引用a的a()方法來完成任務的。所以說它是一種方法調(diào)用的委托。?多態(tài)■LSP(Li-SubstitutionPrinciple), 少覆蓋,組合/繼承復用原則,■特點:?對象不變?只能對對象調(diào)用編譯時運行所定義的方法。?運行時根據(jù)運行時類型進行自動判定。?對屬性:看編譯時類型?對方法的重載:看編譯時類型原則:共性放在基類,個性放在子類。多態(tài)的表現(xiàn):對象不變,運行時類型是不會隨著編譯時類型改變而改變的。編譯時調(diào)用編譯時類型的方法運行時要根據(jù)運行時類型找方法。例:classAnimal(Publicvoideat()(...}Publicvoidsleep()(...}}classDogextendsAnimal(Publicvoidspark()(...}Publicvoideat()(...}Animala=newDog();〃對象變量的引用a,指向一個Dog對象a.eat();〃調(diào)的是實際運行時類型的方法,也就是Dog中的方法,不是Animal的。a.sleep();//itsoka.spark();//itserror.Why?請自已想想但是,我就是要調(diào)用a.spark()方法,而又要編譯不出錯,這就必須要強制類型轉(zhuǎn)換了。Dogd=(Dog)a;//此轉(zhuǎn)換一定會成加,因為a的真正類型就是Dog.d.spark();//這樣就可以調(diào)用了原因:在于d是Dog類型變量,它調(diào)用自已類的方法當然OK,但是,如果變量a實質(zhì)的類型不是Dog,則這種強制轉(zhuǎn)換就會出錯,但是它只會在運行時表現(xiàn)出來,我們可以使用instanceof操作符來進行判斷。instanceof用法:(對象instanceof類名)返回true或者false當類名能夠做為對象的編譯時類型時,返回true.當類名不能做為對象的編譯時類型時,返回false.Ex:classAnimal{}classDogextendsAnimal{}classCatextendsAnimal{}Animala=newDog();(ainstanceofAnimal)——trueDogd=newDog();(dinstanceofDog) trueAnimalc=newCat();(cinstanceofDog) false大家可以這么來記:類名要么是對象的父類,要么是對象本身類型,否則都將返回false.此操用符彳主彳主用在類型轉(zhuǎn)換前,用來判定是否進行強制類型轉(zhuǎn)換。如:if(ainstanceofDog)Dogd=(Dog)a;現(xiàn)在,讓我們來寫一個多態(tài)表現(xiàn)的例子:publicclassTestPolymorphism{publicstaticvoidmain(String[]args){Animal[]a=newAnimal[3];a[0]=newDog();a[1]=newTiger();a[2]=newCat();for(inti=0;i<a.length;i++){a[i].eat();}}}classAnimal{publicvoideat(){}}classDogextendsA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 毛皮制品制作工安全生產(chǎn)意識競賽考核試卷含答案
- 船舶涂裝工安全生產(chǎn)基礎(chǔ)知識能力考核試卷含答案
- 模鍛工操作規(guī)程水平考核試卷含答案
- 2025年陶瓷片狀磷擴散沅項目發(fā)展計劃
- 2025年特種裝備電纜項目發(fā)展計劃
- 2025年新能源掃路車項目發(fā)展計劃
- 2025年雄激素及同化激素合作協(xié)議書
- 2026年智能SOS緊急按鈕項目投資計劃書
- 消防保衛(wèi)方案及保證措施
- 選礦工年度考核試卷及答案
- 農(nóng)貿(mào)市場環(huán)境衛(wèi)生清潔行動工作方案
- 淮安市2022-2023學年七年級上學期期末地理試題
- 2024屆高考語文二輪復習專題-文言文閱讀(上海專用)(解析版)
- 2024可打印的離婚協(xié)議書模板
- 2024屆廣東省深圳市中考物理模擬試卷(一模)(附答案)
- 《房顫的藥物治療》課件
- 診所污水處理管理制度
- 輔導員工作的職責與使命課件
- 新疆交通職業(yè)技術(shù)學院教師招聘考試歷年真題
- 吊籃租賃安拆分包合同
- (財務知識)用友T財務通普版基本操作詳細資料
評論
0/150
提交評論