Java面向?qū)ο蟪绦蛟O計與實踐應用 課件 第六章 繼承與多態(tài)-云醫(yī)院系統(tǒng)的擴展與維護_第1頁
Java面向?qū)ο蟪绦蛟O計與實踐應用 課件 第六章 繼承與多態(tài)-云醫(yī)院系統(tǒng)的擴展與維護_第2頁
Java面向?qū)ο蟪绦蛟O計與實踐應用 課件 第六章 繼承與多態(tài)-云醫(yī)院系統(tǒng)的擴展與維護_第3頁
Java面向?qū)ο蟪绦蛟O計與實踐應用 課件 第六章 繼承與多態(tài)-云醫(yī)院系統(tǒng)的擴展與維護_第4頁
Java面向?qū)ο蟪绦蛟O計與實踐應用 課件 第六章 繼承與多態(tài)-云醫(yī)院系統(tǒng)的擴展與維護_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

江蘇理工學院第6章繼承與多態(tài)—云醫(yī)院系統(tǒng)的擴展與維護時間:主講人:2025.62025繼承機制:構建云醫(yī)院系統(tǒng)的層級結構多態(tài)的應用:云醫(yī)院中的多元化組合抽象類與接口目錄Content010203繼承的概念與實現(xiàn)(extends關鍵字)方法重寫(@Override注解)super關鍵字的使用多態(tài)的概念與實現(xiàn)抽象類的定義與使用(abstract關鍵字)接口的定義與實現(xiàn)(interface關鍵字)知識要點繼承機制:構建云醫(yī)院系統(tǒng)的層級結構Part.01江蘇理工學院繼承是子類使用父類部分或全部屬性和行為的過程,提高代碼復用性。如醫(yī)院中所有患者共有的屬性和行為可定義在父類Patient中。(代碼如右側(cè)所示)繼承的定義示例代碼:publicclassPatient{//基本屬性privateStringid;//患者IDprivateStringname;//患者姓名privateintage;//年齡privateStringgender;//性別privateStringroomNumber;//病房號privatebooleanisAdmitted;//是否已入院//構造方法publicPatient(){}publicPatient(Stringid,Stringname,intage,Stringgender,StringroomNumber,booleanisAdmitted){this.id=id;=name;this.age=age;this.gender=gender;this.roomNumber=roomNumber;this.isAdmitted=isAdmitted;}……//這里省略getter和setter方法,讀者自行添加即可//覆蓋toString方法以便打印患者信息@OverridepublicStringtoString(){return"Patient{"+"id='"+id+'\''+",name='"+name+'\''+",age="+age+",gender='"+gender+'\''+",roomNumber='"+roomNumber+'\''+",isAdmitted="+isAdmitted+'}';} 子類、父類與患者信息在類的聲明中,可以通過使用關鍵字extends來顯示地指明其父類。格式為:[修飾符]class子類名extends父類

有時子類為了和父類保持一致或者為了開發(fā)方便,就用到了繼承機制。由于子類將繼承父類的所有字段(包括成員變量和常量)和方法,即父類的所有字段和方法都自動成為子類的字段和方法,因此,子類體內(nèi)只需寫出新增的字段和方法。注意:Java和C++不一樣,Java只支持單繼承而不支持多繼承,即一個類只能有一個基類,一個基類可以派生出多個類。子類對象的創(chuàng)建publicclassCardiacPatientextendsPatient{//心臟病患者特有的屬性privateStringheartCondition;//心臟狀況描述//構造方法,調(diào)用父類的構造方法publicCardiacPatient(Stringid,Stringname,intage,Stringgender,StringroomNumber,booleanisAdmitted,StringheartCondition){super(id,name,age,gender,roomNumber,isAdmitted);//調(diào)用父類的構造方法this.heartCondition=heartCondition;}//getter和setter方法publicStringgetHeartCondition(){returnheartCondition;}publicvoidsetHeartCondition(StringheartCondition){this.heartCondition=heartCondition;}//覆蓋toString方法,包含心臟病患者的額外信息@OverridepublicStringtoString(){returnsuper.toString()+",heartCondition='"+heartCondition+'\'';}}01示例代碼:創(chuàng)建一個CardiacPatient類去繼承Patient類子類對象的創(chuàng)建實例代碼:實例化一個心臟病患者類的對象并打印他的相關信息publicclassTestCardiacPatient{publicstaticvoidmain(String[]args){//創(chuàng)建一個心臟病患者的實例CardiacPatientpatient=newCardiacPatient("001","張三",60,"男","101",true,"心肌缺血");//打印心臟病患者的信息System.out.println(patient);}}子類對象的創(chuàng)建子類不能直接訪問父類私有屬性和方法,但子類對象擁有父類所有屬性和方法。子類可通過父類提供的方法間接訪問私有屬性。繼承的原則子類構造方法中隱含super(),也可顯式調(diào)用父類含參構造方法,完成父類屬性初始化。用super()調(diào)用父類的構造方法繼承的實現(xiàn)用super()調(diào)用父類的構造方法如果希望在調(diào)用Patient類的構造方法時可以直接為屬性初始化,那么在Patient類中增添如下構造方法。publicPatient(Stringname,intage){this.setName(name);this.setAge(age);}

同時也為CardiacPatient類增加如下帶參構造方法:publicCardiacPatient(Stringname,intage,StringheartCondition){//直接指明調(diào)用父類中有兩個參數(shù)的構造方法super(name,age);this.heartCondition=heartCondition;}那么在TestCardiacPatient類可以對CardiacPatient類實例化:CardiacPatientpatient=newCardiacPatient("張三",60,"心肌缺血");繼承的實現(xiàn)成員變量的隱藏子類聲明與父類同名成員變量時,會隱藏父類同名變量。子類通過super關鍵字可訪問被隱藏的父類變量。

publicclassDoctor{publicstaticStringposition="醫(yī)生";publicintage=26;}publicclassPhysicianextendsDoctor{

//隱藏父類的靜態(tài)成員變量publicStringposition="內(nèi)科醫(yī)生";//隱藏父類的實例變量publicintage=48;}publicclassSurgeonextendsDoctor{

publicstaticStringposition="外科醫(yī)生";publicintage=45;}Part01方法的重寫子類可重寫父類方法,需滿足方法名、參數(shù)列表相同,返回類型兼容等條件。重寫方法是實現(xiàn)多態(tài)的關鍵。

例如,針對子類CardiacPatient,以不變的權限可以復寫父類的toString()方法:@OverridepublicStringtoString(){returnsuper.toString()+"heartCondition='"+heartCondition+'\'';}那么在TestCardiacPatient類可以對CardiacPatient類對象輸出信息:CardiacPatientpatient=newCardiacPatient("001","張三",60,"男","101",true,"心肌缺血");System.out.println(patient);這時調(diào)用的toString()方法,是子類中的toString()方法,它已經(jīng)覆蓋了父類的同名方法。Part02成員變量的隱藏與方法的重寫將子類引用類型轉(zhuǎn)換為父類引用類型,子類對象可視為父類對象,但會失去子類特有屬性和方法。上轉(zhuǎn)型對象可操作子類繼承或隱藏的成員變量和方法,調(diào)用時會執(zhí)行子類重寫后的代碼。向上轉(zhuǎn)型的定義轉(zhuǎn)型對象的性質(zhì)向上轉(zhuǎn)型定義一個父類Staff和它的子類Nurse,子類重寫了父類的同名方法,并且具有自己特有的行為。classStaff{publicStringgetName(){return"員工";}publicStringwork(){return"好好工作";}publicvoidintroduce(){System.out.println("我是"+getName()+","+work());}}classNurseextendsStaff{publicStringgetName(){return"護士";}publicStringwork(){return"護理病人";}publicvoidtask(){System.out.println("確保病人盡快康復");}}向上轉(zhuǎn)型測試類:publicclassTestStaff{publicstaticvoidmain(String[]args){Staffstaff=newStaff();roduce();Nursenurse=newNurse();roduce();//調(diào)用父類中的方法nurse.task();Staffnurse1=newNurse();//這里的nurse1就是上轉(zhuǎn)型對象roduce();nurse=(Nurse)nurse1;//將上轉(zhuǎn)型對象強制轉(zhuǎn)換為子類對象roduce();nurse.task();//這時nurse對象又具有Nurse所有的屬性和行為了}}多態(tài)的應用:云醫(yī)院中的多元化組合Part.02江蘇理工學院多態(tài)的定義多態(tài)指同一個行為具有多個不同表現(xiàn)形式的能力。子類重寫父類方法后,通過父類引用調(diào)用時,會執(zhí)行子類重寫后的代碼。多態(tài)的實現(xiàn)條件需具備繼承關系、子類重寫父類方法、父類引用指向子類對象三個條件。多態(tài)的概念多態(tài)的實現(xiàn)方式通過父類引用調(diào)用子類重寫后的方法,實現(xiàn)多態(tài)行為。不同子類重寫方法后,調(diào)用結果不同。多態(tài)的應用場景在生物學上,多態(tài)表現(xiàn)得尤為顯著,如遺傳多態(tài)性,它是指在一個生物群體中,同一基因座位上存在著兩種或多種等位基因,且每一種等位基因在群體中的頻率都大于1%的現(xiàn)象。這種多態(tài)性在人群中普遍存在,是導致人類表型差異(如膚色、血型、藥物代謝能力等)的重要原因。多態(tài)的實現(xiàn)classBlood{publicvoidborn(){System.out.println("A型血+B型血可以結合成:AB型血(AB)");}}classChild1extendsBlood{publicvoidborn(){System.out.println("A型血+B型血可以結合成:B型血(BB,BO)");}}classChild2extendsBlood{publicvoidborn(){System.out.println("A型血+B型血可以結合成:A型血(AA,AO)");}}classChild3extendsBlood{publicvoidborn(){System.out.println("A型血+B型血可以結合成:O型血(OO)");}}多態(tài)的應用實例代碼:用多態(tài)來定義遺傳多態(tài)性。抽象類與接口Part.03江蘇理工學院抽象類是不能實例化的類,用于表征問題領域中的抽象概念,可包含抽象方法和具體方法。使用abstract修飾的類為抽象類。格式:abstractclass類名{…}舉例:abstractclassDisease{…}abstractclassDevice{…}抽象方法是沒有方法體的方法,子類繼承抽象類時需實現(xiàn)抽象方法。使用abstract修飾的方法為抽象方法,該方法沒有方法體。格式:abstract返回值類型

方法名(參數(shù)列表);舉例:publicabstractStringgetEtiology();publicabstractvoiddiagnosis(Stringi,Stringj);抽象類用于定義通用行為,子類繼承后實現(xiàn)具體行為。如疾病診斷系統(tǒng)中,疾病類可定義為抽象類,具體疾病類繼承并實現(xiàn)診斷方法。抽象類的定義抽象方法的定義抽象類的使用抽象類與抽象方法abstractclassDisease{//疾病的通用屬性privateStringetiology;//構造方法publicDisease(Stringetiology){this.etiology=etiology;}//癥狀的抽象表示(這里只是作為演示,通常癥狀會是一個更復雜的類型)publicabstractvoiddescribeSymptoms();//抽象方法:診斷publicabstractvoiddiagnose();//getter和setterpublicStringgetEtiology(){returnetiology;}publicvoidsetEtiology(Stringetiology){this.etiology=etiology;}//一個通用的方法,如打印疾病名稱publicvoidprintDiseaseName(){System.out.println("Disease:"+etiology);}}示例代碼抽象類的使用//具體的疾病類:Flu(流感)classFluextendsDisease{//構造方法publicFlu(Stringetiology){super(etiology);}//實現(xiàn)抽象方法:描述癥狀@OverridepublicvoiddescribeSymptoms(){System.out.println("Symptoms:Fever,cough,bodyaches.");}//實現(xiàn)抽象方法:診斷@Overridepublicvoiddiagnose(){System.out.println("Diagnosis:"+getEtiology()+"isconfirmedbasedonsymptomsandtestresults.");}}測試方法publicclassDiseaseTest{publicstaticvoidmain(String[]args){Diseaseflu=newFlu("InfluenzaA");flu.printDiseaseName();flu.describeSymptoms();flu.diagnose();}}示例代碼抽象類的使用運行結果接口是比抽象類更抽象的概念,是方法和常量值的定義集合,只提供形式,無具體實現(xiàn)。01接口的定義修飾符interface

接口名{//聲明變量

類型

變量名;……//聲明方法

返回值類型

方法名();……}所有定義在接口中的常量都默認為public、static和final。所有定義在接口中的方法都默認為public和abstract,所以不用修飾符限定它們;和類不同的是,一個接口可以繼承多個父接口。接口允許類的創(chuàng)建者為一個類建立其形式:有方法名、參數(shù)列表和返回類型,但是沒有任何方法體。接口也可以包含數(shù)據(jù)成員。也就是說,接口只提供了形式,而未提供任何具體實現(xiàn)。接口是方法和常量值的定義的集合。接口的定義實現(xiàn)接口的類需實現(xiàn)接口中所有抽象方法,可通過接口實現(xiàn)模擬多繼承。02接口的實現(xiàn)class類名implements接口1,接口2{

方法1(){…//方法體

方法1(){…//方法體

}}由關鍵字implements表示實現(xiàn)的接口,多個接口之間用逗號隔開。多個無關的類可實現(xiàn)同一個接口,一個類可實現(xiàn)多個無關的接口接口的實現(xiàn)實現(xiàn)接口需要注意以下幾點。(1)如果實現(xiàn)某接口的類不是abstract類,則在類的定義部分必須實現(xiàn)指定接口的所有抽象方法,而且方法頭部分應該與接口中的定義完全一致。(2)如果實現(xiàn)某接口的類是abstract類,則它可以不實現(xiàn)該接口所有的方法。(3)接口的抽象方法的訪問權限修飾符都已指定為public,因此,類在實現(xiàn)方法時,必須顯式地使用public。否則,將縮小接口定義方法的訪問控制范圍。注意事項接口的實現(xiàn)可以把實現(xiàn)某一接口的類創(chuàng)建的對象引用賦給該接口聲明的接口變量中,那么該接口變量就可以調(diào)用被類實現(xiàn)的接口中的方法。實際上,當通過接口變量調(diào)用方法時,JVM會根據(jù)該變量引用的實際對象類型,動態(tài)綁定到對應實現(xiàn)類中重寫的方法。接口回調(diào)可用于實現(xiàn)多態(tài)行為,通過接口變量調(diào)用不同實現(xiàn)類的方法。接口回調(diào)的定義接口回調(diào)的應用接口回調(diào)編寫測試類:publicclassExample{publicstaticvoidmain(Stringargs[]){Peoplea; //聲明接口變量a=newStudent();//實例化,接口變量中存放student對象的引用a.peopleList(); //接口回調(diào)a=newTeacher();//實例化,接口變量中存放teacher對象的引用a.peopleList(); //接口回調(diào)}}結果:I’mastudent.I’mateacher.示例代碼:interf

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論