版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、JAVA核心邏輯核心邏輯 第七章第七章:封裝、繼承、多態(tài)封裝、繼承、多態(tài)目錄目錄l 封裝的概念封裝的概念l 繼承的概念繼承的概念l 訪問修飾符訪問修飾符l 方法的覆蓋方法的覆蓋(Override)l super關鍵字關鍵字l 多態(tài)的概念多態(tài)的概念l 強制類型轉(zhuǎn)換與強制類型轉(zhuǎn)換與instanceof關鍵字關鍵字l 下面代碼有何缺陷?下面代碼有何缺陷?為什么要使用封裝為什么要使用封裝Consumer cons = new Consumer();cons.age = -1000; 屬性隨意訪問,不合理的賦值屬性隨意訪問,不合理的賦值 使用封裝使用封裝 封裝的概念封裝的概念l 什么是封裝什么是封裝將類
2、的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,而是將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,而是通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問l 封裝的好處封裝的好處隱藏類的實現(xiàn)細節(jié)隱藏類的實現(xiàn)細節(jié)方便加入控制語句方便加入控制語句方便修改實現(xiàn)方便修改實現(xiàn)只能通過規(guī)定方法訪問數(shù)據(jù)只能通過規(guī)定方法訪問數(shù)據(jù)l 封裝步驟封裝步驟使用封裝使用封裝設為設為private用于屬性的讀寫用于屬性的讀寫 對屬性值的對屬性值的合法合法性性進行判斷進行判斷 使用封裝使用封裝使用封裝使用封裝輸出結(jié)果:輸出結(jié)果:100.0封裝練習封裝練習l 需求說明需求說明使用
3、封裝描述寵物信息,小貓和企鵝使用封裝描述寵物信息,小貓和企鵝小貓:昵稱、健康值、親密度、種類和自身信息顯示小貓:昵稱、健康值、親密度、種類和自身信息顯示企鵝:昵稱、健康值、親密度、性別和自身信息顯示企鵝:昵稱、健康值、親密度、性別和自身信息顯示為什么使用繼承為什么使用繼承l(wèi) 分析代碼分析代碼- name:String- health:int- love:int- strain:StringDog+ print():void+ getName():String+ getHealth ():int+ getLove():int+ getStrain:String+ Dog()- name:Stri
4、ng- health:int- love:int- sex:StringPenguin+ print():void+ getName():String+ getHealth ():int+ getLove():int+ getSex():String+ Penguin()將重復代碼將重復代碼抽取到父類中抽取到父類中使用繼承優(yōu)化設計使用繼承優(yōu)化設計為什么使用繼承為什么使用繼承l(wèi) 使用繼承后使用繼承后減少代碼量減少代碼量 方便修改代碼方便修改代碼 子類與父類是子類與父類是is-a關系關系繼承繼承l(wèi) 繼承關鍵字繼承關鍵字extendsl示例示例編寫父類編寫父類子類繼承子類繼承 class Pet /
5、公共的屬性和方法公共的屬性和方法class Dog extends Pet /子類特有的屬性和方法子類特有的屬性和方法只能繼承一個父類只能繼承一個父類 使用繼承使用繼承l(wèi) 子類訪問父類成員子類訪問父類成員訪問父類構(gòu)造方法訪問父類構(gòu)造方法 super (); super (name);訪問父類屬性訪問父類屬性 ;訪問父類方法訪問父類方法super.print(); 使用使用super關鍵字關鍵字,super代表父類對象代表父類對象 在子類構(gòu)造方法中調(diào)用且在子類構(gòu)造方法中調(diào)用且必須是第一句必須是第一句小結(jié)小結(jié)l java中的繼承的特點中的繼承的特點單繼承單繼承l(wèi) java中單繼
6、承的好處中單繼承的好處代碼復用代碼復用利于維護利于維護l使用場合使用場合符合符合is-a關系關系需要解決代碼重復需要解決代碼重復理解繼承理解繼承l(wèi) Dog類類 extends Animal類類l對象的創(chuàng)建:對象的創(chuàng)建: new Dog();分配空間分配空間 (父類對象空間,子類對象空間)(父類對象空間,子類對象空間)遞歸的構(gòu)造父類對象遞歸的構(gòu)造父類對象初始化屬性初始化屬性調(diào)用構(gòu)造方法調(diào)用構(gòu)造方法Dog call()AnimalsexageJava中的訪問修飾符中的訪問修飾符l java中的訪問修飾符中的訪問修飾符方法的覆蓋方法的覆蓋(Override)l 使用繼承后效果使用繼承后效果l如何實現(xiàn)
7、如下效果呢?如何實現(xiàn)如下效果呢?調(diào)用父類的調(diào)用父類的print()方法,方法,不能顯示不能顯示Dog的的strain信信息和息和Peguin的的sex信息信息 子類重寫父類方法子類重寫父類方法 方法的覆蓋方法的覆蓋(Override)l方法重寫的規(guī)則方法重寫的規(guī)則方法名相同方法名相同參數(shù)列表相同參數(shù)列表相同返回值類型相同或者是其子類;返回值類型相同或者是其子類;訪問權限不能嚴于父類訪問權限不能嚴于父類l方法重載與方法重寫方法重載與方法重寫 方法名方法名參數(shù)表參數(shù)表返回值返回值訪問修飾符訪問修飾符方法重寫方法重寫相同相同相同相同相同或是相同或是其子類其子類不能比父類更不能比父類更嚴格嚴格方法重載
8、方法重載相同相同不相同不相同無關無關無關無關繼承練習繼承練習l 需求說明需求說明優(yōu)化描述寵物信息的功能優(yōu)化描述寵物信息的功能 使用繼承實現(xiàn)使用繼承實現(xiàn)Dog類和類和Penguin類類打印寵物信息打印寵物信息super()思考題思考題super()總結(jié)總結(jié)l 每一個子類的構(gòu)造方法在沒有顯示調(diào)用每一個子類的構(gòu)造方法在沒有顯示調(diào)用super()系統(tǒng)都會系統(tǒng)都會提供一個默認的提供一個默認的super()l super() 書寫在第一行書寫在第一行l(wèi) 可以在子類構(gòu)造方法中顯示調(diào)用可以在子類構(gòu)造方法中顯示調(diào)用super(),完成對特定父類完成對特定父類構(gòu)造方法的調(diào)用構(gòu)造方法的調(diào)用lsuper不能訪問父類的
9、不能訪問父類的private成員成員抽象類抽象類l 問題:實例化問題:實例化Pet是否的意義是否的意義 ?lJava中使用抽象類,限制實例化中使用抽象類,限制實例化labstract也可用于方法也可用于方法抽象方法抽象方法抽象方法沒有方法體抽象方法沒有方法體抽象方法必須在抽象類里抽象方法必須在抽象類里抽象方法必須在子類中被實現(xiàn),除非子類是抽象類抽象方法必須在子類中被實現(xiàn),除非子類是抽象類Pet pet = new Pet (貝貝貝貝,20,40);pet.print();public abstract class Pet public abstract void print();抽象類練習抽象
10、類練習l需求說明:需求說明:修改修改Pet類為抽象類類為抽象類修改修改Pet類的類的print()方法為抽象方法方法為抽象方法輸出輸出Dog信息信息抽象類的特點抽象類的特點l 抽象類可以用于聲明,但不允許創(chuàng)建對象抽象類可以用于聲明,但不允許創(chuàng)建對象l抽象類可以被子類繼承,從而創(chuàng)建子類對象抽象類可以被子類繼承,從而創(chuàng)建子類對象抽象方法的特點抽象方法的特點l 擁有抽象方法的類必須是抽象類擁有抽象方法的類必須是抽象類抽象方法的特點抽象方法的特點l 抽象方法由子類實現(xiàn)抽象方法由子類實現(xiàn)非抽象類繼承抽象非抽象類繼承抽象類,必須實現(xiàn)父類類,必須實現(xiàn)父類的所有抽象方法的所有抽象方法抽象的作用抽象的作用l 抽
11、取共性抽取共性抽象的作用抽象的作用l 不同實現(xiàn)不同實現(xiàn)抽象的作用抽象的作用l 抽象類是更高層次的抽象抽象類是更高層次的抽象綜合練習綜合練習轎車轎車客車(金杯、金龍)客車(金杯、金龍)車型車型別克商務別克商務艙艙GL8寶馬寶馬550i別克林別克林蔭大道蔭大道16座座日租費日租費(元元/天天)6005003008001500l 需求說明需求說明編寫程序?qū)崿F(xiàn)計算租賃價編寫程序?qū)崿F(xiàn)計算租賃價 某汽車租賃公司出租多種車輛,車型及租金情況如下:某汽車租賃公司出租多種車輛,車型及租金情況如下:綜合練習綜合練習l 提示提示類:類: Vehicle 機動車機動車(父類父類) Car 轎車轎車 Bus 客車客車屬
12、性:屬性:Vehicle- no(車牌號車牌號) Car- type(型號型號) Bus- seatCount(座位數(shù)座位數(shù))方法:方法:Vehicle- calculate(int days) :double 為什么使用多態(tài)為什么使用多態(tài)l 問題思考問題思考寵物餓了,需要主人給寵物喂食寵物餓了,需要主人給寵物喂食不同寵物吃的食物不一樣不同寵物吃的食物不一樣不同寵物恢復后體力值不一樣不同寵物恢復后體力值不一樣 吃狗糧吃狗糧 吃吃魚魚 小貓小貓 企鵝企鵝 健康值增加健康值增加3 3 小貓小貓 健康值增加健康值增加5 企鵝企鵝 為什么使用多態(tài)為什么使用多態(tài)l 分析分析小貓類小貓類增加小貓吃食的方法
13、增加小貓吃食的方法企鵝類企鵝類增加企鵝吃食的方法增加企鵝吃食的方法創(chuàng)建主人類創(chuàng)建主人類編寫給小貓喂食的方法編寫給小貓喂食的方法編寫給企鵝喂食的方法編寫給企鵝喂食的方法示例示例1:未使用多態(tài)實現(xiàn)給寵物喂食:未使用多態(tài)實現(xiàn)給寵物喂食為什么使用多態(tài)為什么使用多態(tài)l 問題問題如果再領養(yǎng)如果再領養(yǎng)XXX寵物,就需要給寵物,就需要給XXX喂食,怎么辦?喂食,怎么辦?添加添加XXX類,繼承類,繼承Pet類,實現(xiàn)吃食方法類,實現(xiàn)吃食方法修改修改Master類,添加給類,添加給XXX喂食的方法喂食的方法為什么使用多態(tài)為什么使用多態(tài)public class Master public void feed( Dog
14、 dog ) dog.eat(); public void feed( Penguin pgn ) pgn.eat(); public void feed( XXX xxx ) xxx.eat(); 主人類主人類 Master master = new Master();master.feed(dog);master.feed(penguin);master.feed(xxx); 測試方法測試方法 頻繁修改代碼,代碼可擴展性、可維護性差,頻繁修改代碼,代碼可擴展性、可維護性差,如何優(yōu)化?如何優(yōu)化? 參數(shù)都是參數(shù)都是Pet類的子類類的子類可否使用一個可否使用一個feed(Pet pet)實現(xiàn)對所
15、有寵物的喂食?實現(xiàn)對所有寵物的喂食? 使用多態(tài)優(yōu)化設計使用多態(tài)優(yōu)化設計 多態(tài)的概念多態(tài)的概念l 生活中的多態(tài)生活中的多態(tài)不同類型的打印機打印效果不同不同類型的打印機打印效果不同程序中的多態(tài)程序中的多態(tài)多態(tài):同一個引用類型,使用不同的實例而執(zhí)行不同操作多態(tài):同一個引用類型,使用不同的實例而執(zhí)行不同操作 父類引用,子類對象父類引用,子類對象 同一種事物,由于條件不同,產(chǎn)生的結(jié)果也不同同一種事物,由于條件不同,產(chǎn)生的結(jié)果也不同黑白打印機 彩色打印機 打印如何實現(xiàn)多態(tài)如何實現(xiàn)多態(tài)l使用多態(tài)實現(xiàn)思路使用多態(tài)實現(xiàn)思路編寫父類編寫父類編寫子類,子類重寫父類方法編寫子類,子類重寫父類方法運行時,使用父類的類型
16、,子類的對象運行時,使用父類的類型,子類的對象向上轉(zhuǎn)型向上轉(zhuǎn)型l實現(xiàn)多態(tài)的兩種形式實現(xiàn)多態(tài)的兩種形式使用父類作為方法形參實現(xiàn)多態(tài)使用父類作為方法形參實現(xiàn)多態(tài)使用父類作為方法返回值實現(xiàn)多態(tài)使用父類作為方法返回值實現(xiàn)多態(tài) 實現(xiàn)多態(tài)的兩個要素實現(xiàn)多態(tài)的兩個要素Pet pet = new Dog(); 自動類型轉(zhuǎn)換自動類型轉(zhuǎn)換使用多態(tài)使用多態(tài)l使用多態(tài)優(yōu)化主人給寵物喂食使用多態(tài)優(yōu)化主人給寵物喂食 Pet pet = new Dog();Master master = new Master();master.feed( pet ); public class Master public void fee
17、d( Pet pet ) pet.eat(); 主人類主人類 測試方法測試方法 同一種操作方式,同一種操作方式,不同的操作對象不同的操作對象 使用父類作為使用父類作為方法形參方法形參 示例示例2:使用多態(tài)實現(xiàn)給寵物喂食:使用多態(tài)實現(xiàn)給寵物喂食多態(tài)練習多態(tài)練習1l需求說明需求說明使用多態(tài)實現(xiàn)喂養(yǎng)寵物功能使用多態(tài)實現(xiàn)喂養(yǎng)寵物功能增加寵物貓并喂食,其健康值增加增加寵物貓并喂食,其健康值增加4多態(tài)練習多態(tài)練習2l需求說明需求說明使用多態(tài)實現(xiàn)領養(yǎng)寵物使用多態(tài)實現(xiàn)領養(yǎng)寵物使用父類作為方法返回值使用父類作為方法返回值l實現(xiàn)思路實現(xiàn)思路在在Master類添加領養(yǎng)方法類添加領養(yǎng)方法getPet(String t
18、ypeId )創(chuàng)建測試類,根據(jù)主人選擇寵物類型編號來領養(yǎng)寵物創(chuàng)建測試類,根據(jù)主人選擇寵物類型編號來領養(yǎng)寵物public class Master public Pet getPet(String typeId ) 使用父類作為使用父類作為返回值類型返回值類型 主人類主人類 多態(tài)的特點多態(tài)的特點l Dog d = new Dog();Pet a = new Dog();l 多態(tài)的特點多態(tài)的特點 對象類型不可變,引用類型可變對象類型不可變,引用類型可變 只能調(diào)用其引用類型中定義的方法只能調(diào)用其引用類型中定義的方法 運行時會運行子類覆蓋的方法運行時會運行子類覆蓋的方法l多態(tài)的作用多態(tài)的作用提高代碼的
19、通用性提高代碼的通用性父類到子類的轉(zhuǎn)換父類到子類的轉(zhuǎn)換l 問題問題實現(xiàn)主人與寵物玩耍功能實現(xiàn)主人與寵物玩耍功能和小貓玩接飛盤游戲,小貓的健康值減少和小貓玩接飛盤游戲,小貓的健康值減少10,與主人親密度增加,與主人親密度增加5和企鵝玩游泳游戲,企鵝的健康值減少和企鵝玩游泳游戲,企鵝的健康值減少10,與主人親密度增加,與主人親密度增加5l分析分析給給Dog添加接飛盤方法添加接飛盤方法catchingFlyDisc( )給給Penguin添加游泳方法添加游泳方法swimming( )給主人添加給主人添加play(Pet pet)方法方法父類到子類的轉(zhuǎn)換父類到子類的轉(zhuǎn)換l代碼實現(xiàn)代碼實現(xiàn)public
20、class Master public void play(Pet pet) pet.catchingFlyDisc();public class Penguin extends Pet public void swimming () public class Dog extends Pet public void catchingFlyDisc() 小貓類小貓類 企鵝類企鵝類 主人類主人類 Pet pet = new Dog();Master master = new Master();master.pet(pet); 測試類測試類 父類到子類的轉(zhuǎn)換父類到子類的轉(zhuǎn)換l父類到子類的轉(zhuǎn)換父類到子
21、類的轉(zhuǎn)換向下轉(zhuǎn)型(強制類型轉(zhuǎn)換)向下轉(zhuǎn)型(強制類型轉(zhuǎn)換)linstanceof運算符運算符語法語法Pet pet = new Dog(歐歐歐歐, 雪娜瑞雪娜瑞);Dog dog = (Dog) pet; Penguin png = (Penguin) pet;對象對象 instanceof 類或接口類或接口報錯,必須轉(zhuǎn)換為報錯,必須轉(zhuǎn)換為父類指向的真實子父類指向的真實子類類型類類型父類到子類的轉(zhuǎn)換父類到子類的轉(zhuǎn)換l優(yōu)化主人與寵物玩耍優(yōu)化主人與寵物玩耍public class Master public void play(Pet pet) if (pet instanceof Dog) /如果傳入的是小貓如果傳入的是小貓 Dog dog = (Dog) pet; dog.catchingFlyDisc();else if (pet instanceof Penguin) /如果傳入的是企鵝如果傳入的是企鵝 Penguin pgn = (Penguin) pet; pgn.swimming(); 主人類主人類 示例示例4:使用多態(tài)實現(xiàn)主人與寵物玩耍:使
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度養(yǎng)老院護理服務與設施租賃合同3篇
- 2025年度土地流轉(zhuǎn)與農(nóng)業(yè)廢棄物綜合利用合同3篇
- 2025年度綠色能源補貼合同范本2篇
- 2025年度汽車4S店店面租賃及品牌運營合同3篇
- 二零二四醫(yī)院護士勞動合同樣本:醫(yī)院護理團隊人員勞動合同3篇
- 2025年度債務重組與財產(chǎn)分配稅務籌劃合同3篇
- 二零二五版高端別墅租賃管理服務合同2篇
- 2024知名品牌授權使用及銷售代理合同
- 2024食堂人員安全生產(chǎn)責任與聘用合同3篇
- 2024貼磚勞務分包合同施工質(zhì)量監(jiān)督協(xié)議3篇
- 2025年湖北武漢工程大學招聘6人歷年高頻重點提升(共500題)附帶答案詳解
- 【數(shù) 學】2024-2025學年北師大版數(shù)學七年級上冊期末能力提升卷
- GB/T 26846-2024電動自行車用電動機和控制器的引出線及接插件
- 遼寧省沈陽市皇姑區(qū)2024-2025學年九年級上學期期末考試語文試題(含答案)
- 2024年國家工作人員學法用法考試題庫及參考答案
- 妊娠咳嗽的臨床特征
- 國家公務員考試(面試)試題及解答參考(2024年)
- 《阻燃材料與技術》課件 第6講 阻燃纖維及織物
- 2024年金融理財-擔保公司考試近5年真題附答案
- 泰山產(chǎn)業(yè)領軍人才申報書
- 高中語文古代文學課件:先秦文學
評論
0/150
提交評論