Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目五 類的繼承與多態(tài)(2.0)_第1頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目五 類的繼承與多態(tài)(2.0)_第2頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目五 類的繼承與多態(tài)(2.0)_第3頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目五 類的繼承與多態(tài)(2.0)_第4頁
Java程序設(shè)計(jì)教程(第三版)課件 項(xiàng)目五 類的繼承與多態(tài)(2.0)_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

項(xiàng)目五類的繼承與多態(tài)

相關(guān)詞匯:extends:繼承2.baseclass:基類derivedclass

:派生類4.polymorphism:多態(tài)override:重寫、覆寫6.overload:重載7.upcasting:向上轉(zhuǎn)型8.downcasting:向下轉(zhuǎn)型復(fù)習(xí):1、封裝的兩層含義:第一層是將類的屬性和行為封裝在一個類中,對類外而言,無需了解類內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。第二層含義是將類的屬性的訪問權(quán)限用關(guān)鍵字private去修飾。用private修飾的屬性只能在本類中訪問,類以外是無法直接訪問的,但可以通過類的公有方法去訪問。2.封裝的目的封裝的目的就是保護(hù)內(nèi)容,保證某些屬性或方法不被外部看見。3.封裝的實(shí)現(xiàn)使用私有訪問權(quán)限:private。

private修飾符定義的成員變量或成員方法,只能在聲明它們的類中訪問,不能在其他類中訪問?!卷?xiàng)目描述】類的封裝、繼承與多態(tài)是面向?qū)ο蟮娜筇卣?。類的封裝我們前面已經(jīng)介紹了,本項(xiàng)目是通過Person類及其子類的創(chuàng)建,介紹了類的繼承及多態(tài)的使用。

【任務(wù)分解】

本項(xiàng)目可分解為以下四個任務(wù):1.類的繼承。2.進(jìn)一步學(xué)習(xí)繼承。3.類的多態(tài)。4.進(jìn)一步學(xué)習(xí)多態(tài)。任務(wù)一類的繼承

【任務(wù)描述】

任務(wù)5-1:定義一個父類Person,包含的屬性有“id和“姓名”。有說話方法,用于輸出id和姓名信息;定義Person類的兩個子類Teacher類和Student類,在兩個子類中有一個introduction方法,介紹自己是教師還是學(xué)生,并輸出自己的id和姓名。跳至解題思路【必備知識】1.繼承的概念

繼承是指由現(xiàn)成的類產(chǎn)生新的類。被繼承的現(xiàn)成類稱為父類或超類,新產(chǎn)生的類稱為子類或派生類。通過繼承機(jī)制,子類繼承了父類的成員屬性和成員方法,并且可以定義自己新的成員屬性和方法,也可以對父類的成員變量或方法進(jìn)行修改,使類的功能得以擴(kuò)充。

2.繼承的作用

什么時候需要使用繼承呢?當(dāng)兩個類擁有相同的方法或?qū)傩裕磧蓚€類存在重復(fù)代碼,此時代碼設(shè)計(jì)要遵循“一次編寫,僅編寫一次”的原則。使用繼承可以解決代碼重復(fù)的問題。示例1:創(chuàng)建一個Teacher類,具有id、姓名屬性。具有說話方法;創(chuàng)建一個Student類,具有id、姓名屬性。具有說話方法。classTeacher{ privateStringid;//聲明id屬性 privateStringname;//聲明姓名屬性publicTeacher(Stringid,Stringname){//構(gòu)造方法,對各屬性賦初值this.id=id; =name; }

publicvoidsay(){//定義say()方法,輸出信息

System.out.println("大家好!我是一名教師。"); System.out.println("Id:"+id+",姓名:"+name); }}

classStudent{ privateStringid;//聲明id屬性 privateStringname;//聲明姓名屬性 /**構(gòu)造方法,對各屬性賦初值*/publicStudent(Stringid,Stringname){this.id=id; =name; }

publicvoidsay(){//定義say()方法,輸出信息System.out.println("大家好!我是一名學(xué)生。");System.out.println("Id:"+id+",姓名:"+name); }}3.繼承的實(shí)現(xiàn)在Java中類的繼承格式以下:[格式5-1類的繼承格式]class父類{…}//定義父類class子類extends父類{…}//用extends關(guān)鍵字實(shí)現(xiàn)類的繼承示例2:創(chuàng)建一個Person類,具有id、姓名屬性,具有說話方法。分別創(chuàng)建繼承于Person類的子類Teacher類和Student類,在兩個子類中什么代碼也不寫,觀察代碼運(yùn)行結(jié)果。下面,對示例1進(jìn)行整改,即為Teacher類和Student類抽象出一個父類Person,在Person類中實(shí)現(xiàn)Teacher類和Student類的共同屬性和方法。Teacher類和Student類在繼承Person類的基礎(chǔ)上,增加自己的屬性和方法,完成類的設(shè)計(jì)。packagecom;classPerson{ privateStringid;//聲明id屬性 privateStringname;//聲明姓名屬性

publicStringgetId(){ returnid; } publicvoidsetId(Stringid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; }

publicvoidsay(){//定義say()方法,輸出信息 System.out.println("Id:"+id+",姓名:"+name); }}classTeacherextendsPerson{//Teacher類繼承Person類

}

classStudentextendsPerson{

}

publicclassExample5_2{ publicstaticvoidmain(Stringargs[]){ Teacherteacher=newTeacher(); teacher.setId("116"); teacher.setName("林小蕾"); teacher.say(); Studentstu=newStudent(); stu.setId("301"); stu.setName("張俊"); stu.say(); }}示例3:創(chuàng)建一個Person類,具有id、姓名屬性,具有說話方法。分別創(chuàng)建繼承于Person類的子類Teacher類和Student類,在子類中分別定義一個自我介紹的方法,方法輸出自己的身份和基本信息。classPerson{ privateStringid;//聲明id屬性 privateStringname;//聲明姓名屬性 publicPerson(Stringid,Stringname){//構(gòu)造方法,對各屬性賦初值 this.id=id; =name; } publicvoidsay(){//定義say()方法,輸出信息 System.out.println("Id:"+id+",姓名:"+name); }}classTeacherextendsPerson{//Teacher類繼承Person類publicTeacher(Stringid,Stringname){ super(id,name);//調(diào)用父類的構(gòu)造方法 } publicvoidintroduction(){ System.out.println("大家好!我是一名教師。"); super.say();//調(diào)用父類的say方法,輸出基本信息 }}classStudentextendsPerson{ publicStudent(Stringid,Stringname){ super(id,name);//調(diào)用父類的構(gòu)造方法 }

publicvoidintroduction(){ System.out.println("大家好!我是一名學(xué)生。"); super.say();//調(diào)用父類的say方法,輸出基本信息 }}【解題思路】

任務(wù)5-1:1.定義一個父類Person類,定義id和姓名屬性,定義帶參構(gòu)造方法以及說話的方法。說話方法用于輸出兩個子類共同的屬性。2.分別定義兩個子類Teacher類和Student類,添加帶參構(gòu)造方法。在子類的方法體中調(diào)用父類的方法。若要調(diào)用父類的構(gòu)造方法,可在子類的構(gòu)造方法中使用super(參數(shù)列表)調(diào)用父類的構(gòu)造方法。3.聲明一個測試類,利用帶參構(gòu)造方法分別實(shí)例化一個Teacher類和Student類對象。分別調(diào)用父類的方法,輸出對象的信息。重溫任務(wù)描述示例分析:本示例先定義一個父類Person,在Person類中定義了“id”和“name”屬性,還定義了一個帶參構(gòu)造方法Person(Stringid,Stringname),其作用是為屬性賦初值,另外還定義了一個say()方法,用于輸出“id”和“name”信息。接著,定義了繼承于Person類的兩個子類——Teacher類和Student類。子類自動繼承父類Person的屬性和方法(不繼承父類的構(gòu)造方法)。在子類中定義introduction()方法,此方法有兩條語句,第一條語句是介紹自己的特性,第二條語句是通過調(diào)用了父類的say()方法輸出共性的東西。從本示例可知,子類繼承父類,可以擴(kuò)展已有類的功能?!救蝿?wù)透析】packagecom;classPerson{ privateStringid;//聲明id屬性 privateStringname;//聲明姓名屬性 publicPerson(Stringid,Stringname){//構(gòu)造方法,對各屬性賦初值 this.id=id; =name; }

publicvoidsay(){//定義say()方法,輸出信息 System.out.println("Id:"+id+",姓名:"+name); }}

classTeacherextendsPerson{//Teacher類繼承Person類 publicTeacher(Stringid,Stringname){ super(id,name);//調(diào)用父類的構(gòu)造方法 }· publicvoidintroduction(){ System.out.println("大家好!我是一名教師。"); super.say();//調(diào)用父類的say方法 }}classStudentextendsPerson{ publicStudent(Stringid,Stringname){ super(id,name);//調(diào)用父類的構(gòu)造方法 }

publicvoidintroduction(){ System.out.println("大家好!我是一名學(xué)生。"); super.say();//調(diào)用父類的say方法 }}

publicclassExtDemo5_1Test{ publicstaticvoidmain(Stringargs[]){ Teacherteacher=newTeacher("116","林小蕾"); Studentstu=newStudent("301","張俊"); roduction(); roduction(); }}【課堂提問】☆.什么時候需要使用繼承?☆.如何實(shí)現(xiàn)繼承?☆.this和super關(guān)鍵字的作用是什么?

【現(xiàn)場演練】模仿任務(wù)5-1:設(shè)計(jì)一個類Book,有屬性bookName,bookPrice,author(作者),number(訂購數(shù)目),有方法getBookInfo(),獲取書的各種信息。寫類XiaoShuo(小說)繼承Book,有屬性renWu(yù)(人物),有方法getBookKind()方法,在該方法中打印出所屬類別,并調(diào)用父類的getBookInfo()方法用于輸出小說的各種信息。寫類JiaoCai(教材)繼承Book,有屬性keMu(科目),有方法getBookKind()方法,在該方法中打印出所屬類別,并調(diào)用父類的getBookInfo()方法用于輸出教材的各種信息?!局R鏈接】this關(guān)鍵字的作用1.使用this引用當(dāng)前對象的成員屬性。this.成員屬性2.強(qiáng)調(diào)是本類的成員方法。this.成員方法名(參數(shù)表)3.this關(guān)鍵字強(qiáng)調(diào)是當(dāng)前對象。

super關(guān)鍵字的作用1.在子類中通過super訪問父類成員屬性。super.成員變量名2.調(diào)用父類成員方法super.成員方法名(參數(shù)表)3.利用super(),調(diào)用父類中的構(gòu)造方法。super(參數(shù)表)

☆Object類在Java中,定義有一種特殊的類Object,其他所有的類都是Object的子類。也就是說,Object是所有對象引用繼承層次結(jié)構(gòu)的根?!頙ava只支持單繼承Java只支持單繼承,不能使用多重繼承,即一個類只能繼承另一個類,不充許一個類同時繼承兩個或以上的類。但是,Java充許多層繼承,即一個類可以繼承某一個類的子類。如:classX{}classY{}classZextendsX,Y{}以上代碼是錯誤的,即Z類不能同時繼承于X和Y類。正確的代碼如下所示:classX{}classYextendsX{}classZextendsY{}即Y繼承X,Z繼承Y。任務(wù)二

進(jìn)一步學(xué)習(xí)繼承

【任務(wù)描述】

任務(wù)5-2:為子類Teacher添加一個無參構(gòu)造方法,并在父類Person中也添加一個無參的構(gòu)造方法。在各自的構(gòu)造方法中輸出一句提示,觀察父類和子類構(gòu)造方法的調(diào)用關(guān)系及順序。并為父類Person的每一個屬性添加一個setter()和getter()方法,調(diào)用setter()和getter()方法為子類的實(shí)例對象賦值。跳至解題思路【必備知識】1.子類實(shí)例化過程

子類對象在實(shí)例化時是先調(diào)用父類中的構(gòu)造方法,然后再調(diào)用子類自己的構(gòu)造方法。

2.使用setter和getter方法訪問父類的私有屬性

當(dāng)父類中的成員屬性是用關(guān)鍵字private修飾時,其子類是不能直接訪問這些屬性的。在任務(wù)一中,我們是通過調(diào)用父類的帶參構(gòu)造方法來給這些屬性賦值班的。除了可使用帶參的構(gòu)造方法給屬性設(shè)置初值外,子類的實(shí)例對象還可以通過setter()和getter()方法來訪問父類中的私有屬性。示例4:為子類Teacher添加一個無參構(gòu)造方法,并在父類Person中也添加一個無參的構(gòu)造方法。在各自的構(gòu)造方法中輸出一句提示,觀察父類和子類構(gòu)造方法的調(diào)用關(guān)系及順序。classPerson{//定義一個父類Person privateStringid;//聲明id屬性 privateStringname;//聲明姓名屬性

publicPerson(){ super();//此處的super指的是所有類的父類,最頂層的Object System.out.println("你好,我是父類Teacher的無參構(gòu)造方法!!!!"); }}classTeacherextendsPerson{//定義一個子類Teacher,繼承于類Person publicTeacher(){ super();//此處super關(guān)鍵字的作用是調(diào)用父類Person的無參構(gòu)造方法 System.out.println("你好,我是子類Teacher的無參構(gòu)造方法!"); }}publicclassExample5_4{ publicstaticvoidmain(String[]args){ Teachert=newTeacher(); }}從本例運(yùn)行結(jié)果可知,雖然實(shí)例化的是子類對象,但事實(shí)上,在實(shí)例化子類對象時是先調(diào)用父類中的構(gòu)造方法的,然后再調(diào)用子類自己的構(gòu)造方法?!窘忸}思路】

任務(wù)5-2:1.在子類Teacher中添加一個無參構(gòu)造方法,并在該構(gòu)造方法中輸出一句提示“你好,我是子類Teacher的無參構(gòu)造方法”。2.在父類Person中添加一個無參構(gòu)造方法,并在該構(gòu)造方法中輸出一句提示“你好,我是父類Person的無參構(gòu)造方法”。3.在父類Person中為屬性id和name添加一對setter()和getter()方法。4.聲明一個測試類,利用無參構(gòu)造方法實(shí)例化一個Teacher子類對象,調(diào)用父類的setter()和getter()方法。觀察程序輸出結(jié)果。重溫任務(wù)描述【任務(wù)透析】packagecn;classPerson{//定義一個父類Person privateStringid;//聲明id屬性 privateStringname;//聲明姓名屬性 publicStringgetId(){ returnid; } publicvoidsetId(Stringid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; } publicPerson(){ super();//此處的super指的是所有類的父類,最頂層的Object System.out.println("你好,我是父類Teacher的無參構(gòu)造方法!!!!"); }}classTeacherextendsPerson{//定義一個子類Teacher,繼承于類Person

publicTeacher(){ super(); System.out.println("你好,我是子類Teacher的無參構(gòu)造方法!"); }}

publicclassExtDemo5_2Test{ publicstaticvoidmain(String[]args){ Teachert=newTeacher(); t.setId("2011007"); t.setName("何小倩"); System.out.println("我的Id是:"+t.getId()+"我的名字是:"+t.getName()); }}【課堂提問】☆.什么時候需要使用繼承?☆.如何實(shí)現(xiàn)繼承?☆.this和super關(guān)鍵字的作用是什么?

【現(xiàn)場演練】模仿任務(wù)5-2:在父類Book中添加一個無參的構(gòu)造方法,為子類類XiaoShuo(小說)添加一個無參構(gòu)造方法,并在各自的構(gòu)造方法中輸出一句提示,觀察父類和子類構(gòu)造方法的調(diào)用關(guān)系及順序。并為父類Book的每一個屬性添加一個setter()和getter()方法,調(diào)用setter()和getter()方法為子類的實(shí)例對象賦值。任務(wù)三

類的多態(tài)

【任務(wù)描述】

任務(wù)5-3:在任務(wù)5-2的基礎(chǔ)上,在父類Person中添加一個run()方法,在子類Teacher中定義和父類相同名字的run()方法。在測試類中,分別生成子類Teacher和父類Person的實(shí)例對象,并利用各自的實(shí)例對象去調(diào)用同名方法run(),觀察運(yùn)行結(jié)果。跳至解題思路【必備知識】1.多態(tài)的概念多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征之一。多態(tài)性是指同一個方法名可以有不同的實(shí)現(xiàn)體,即不同的方法體。在Java語言中通過以下兩種方式來實(shí)現(xiàn)多態(tài)性:(1)方法重寫(也稱覆寫或覆蓋)。(2)方法重載。

2.多態(tài)的作用多態(tài)是為了實(shí)現(xiàn)接口重用,使用對象多態(tài)性,以提高代碼的可維護(hù)性和可擴(kuò)展性。3.多態(tài)的實(shí)現(xiàn)(1)方法重寫1)重寫是發(fā)生在繼承關(guān)系的兩個類中,當(dāng)一個類繼承了另一個類,就可以在子類中定義一個與父類中的方法同名的方法,子類中的這個方法就是對父類同名方法的重寫,用以實(shí)現(xiàn)父類方法所不能實(shí)現(xiàn)的功能。

2)重寫是子類中的方法對父類中已有的方法進(jìn)行重新定義。3)子類中重寫的方法與父類的方法在返回類型、方法名、參數(shù)列表上必須完全相同。而且在子類中覆寫的方法權(quán)限必須大于(或等于)父類中方法的訪問權(quán)限。Java中有4種訪問控制權(quán)限:public>protected>default(缺省:什么關(guān)鍵字都不加)>private4)當(dāng)以子類的對象調(diào)用與父類同名的方法時,會直接找到子類的方法,而不是父類的同名方法,當(dāng)發(fā)現(xiàn)子類中不存在這個方法時,才會調(diào)用父類中的同名方法。(2)方法重載

方法重載是發(fā)生在同一個類中,即在同一個類中存在幾個同名方法,方法參數(shù)類型或個數(shù)有所區(qū)別。如果參數(shù)類型和個數(shù)完全一樣,只是方法返回類型不同,不屬于重載?!窘忸}思路】

任務(wù)5-3:1.在父類Person中添加一個run(),在該方法中輸出一句提示“我是父類Person的run()方法!”。2.在子類Teacher中定義一個和父類的方法run(),在該方法中輸出一句提示“我是子類Teacher的run()方法!”。3.聲明一個測試類,分別生成子類Teacher和父類Person的實(shí)例對象,并利用各自的實(shí)例對象去調(diào)用同名方法run(),觀察程序輸出結(jié)果。重溫任務(wù)描述【任務(wù)透析】packagett;classPerson{//定義一個父類Person privateStringid;//聲明id屬性 privateStringname;//聲明姓名屬性

publicPerson(Stringid,Stringname){ super(); this.id=id; =name; }

publicvoidsay(){ System.out.println("我是父類Person的say()方法,我的Id是:"+id+",我的名字叫:"+name); }

publicvoidrun(){ System.out.println("我是父類Person的run()方法!"); }}classTeacherextendsPerson{//定義一個子類Teacher,繼承于類Person publicTeacher(Stringid,Stringname){ super(id,name); }

publicvoidrun(){ System.out.println("我是子類Teacher的run()方法!\n"); }}

publicclassExtDemo5_3Test{ publicstaticvoidmain(String[]args){ Teachert=newTeacher("2014013","文靜"); t.say();//在父類中定義了say()方法,子類中沒有定義該方法,則子類對象會調(diào)//用父類的該方法。 t.run();//在子類中重寫了父類的同名方法,那么子類對象調(diào)用的是自己的方法。 Personp=newPerson("2002135","雷蕾"); p.run();}}【課堂提問】☆.如何實(shí)現(xiàn)多態(tài)?☆.方法重載和方法重寫的主要區(qū)別是什么?

【現(xiàn)場演練】模仿任務(wù)5-3:設(shè)計(jì)一個類Book,有屬性bookName,bookPrice,author(作者),number(訂購數(shù)目),有方法getBookInof(),獲取書的各種信息。寫類XiaoShuo(小說)繼承Book,有屬性renWu(yù)(人物)。重寫父類方法getBookInfo(),用來打印出小說的各種信息。寫類JiaoCai(教材)繼承Book,有屬性keMu(科目),重寫抽象方法getBookInfo(),用來打印出教材的各種信息?!局R鏈接】☆final關(guān)鍵字的作用1.final關(guān)鍵字修飾的類是不同被繼承的。2.final關(guān)鍵字修飾的方法是不能被重寫的。3.final關(guān)鍵字修飾的量是常量。任務(wù)四

進(jìn)一步學(xué)習(xí)多態(tài)

【任務(wù)描述】任務(wù)5-4:在任務(wù)5-1教師類和學(xué)生類的的基礎(chǔ)上,開發(fā)一個學(xué)校人員身份確認(rèn)類,對各成員的自我介紹內(nèi)容進(jìn)行確認(rèn)。同時,增加一個行政人員類型,該類型人員同樣是有一個自我介紹的方法,介紹自己是行政人員,并輸出自身的id和姓名信息。跳至解題思路【必備知識】在講述新的知識點(diǎn)之前,我們先來看兩個示例。示例5:

在示例3基礎(chǔ)上,添加一個學(xué)校人員身份確認(rèn)類,分別對教師和學(xué)生的自我介紹內(nèi)容進(jìn)行確認(rèn)。示例3回顧:創(chuàng)建一個Person類,具有id、姓名屬性,具有說話方法。分別創(chuàng)建繼承于Person類的子類Teacher類和Student類,在子類中分別定義一個自我介紹的方法,方法輸出自己的身份和基本信息。packagecom;classIdentityConfirm{ publicvoidconfirm(Teachert){//對教師身份進(jìn)行確認(rèn) roduction(); }

publicvoidconfirm(Students){//對學(xué)生身份進(jìn)行確認(rèn) roduction(); }}

publicclassExample5_5{ publicstaticvoidmain(Stringargs[]){ Teacherteacher=newTeacher("116","林小蕾"); Studentstu=newStudent("301","張俊"); roduction(); roduction(); }}示例分析:本示例中增加了一個身份確認(rèn)類IdentityConfirm,在該類中有兩個重載的方法confirm,其作用是通過調(diào)用教師和學(xué)生各自的自我介紹內(nèi)容對其身份進(jìn)行確認(rèn),因此兩個confirm方法的形式參數(shù)類型分別是Teacher類和Student類,分別用于接收Teacher類和Student類的實(shí)例對象。示例6:在示例5的基礎(chǔ)上,再增加一種行政人員類型,此類型包含的屬性有id和姓名,包含的一個自我介紹方法。packagecom;classAdministrationStaffextendsPerson{//定義Person類的子類AdministrationStaff

publicAdministrationStaff(Stringid,Stringname){ super(id,name);//調(diào)用父類的構(gòu)造方法 }

publicvoidintroduction(){//重寫父類的introduction()方法 System.out.println("大家好!我是一名行政人員。"); super.say(); }}classIdentityConfirm{ publicvoidconfirm(Teachert){//對教師身份進(jìn)行確認(rèn) roduction(); }

publicvoidconfirm(Students){//對學(xué)生身份進(jìn)行確認(rèn) roduction(); }

publicvoidconfirm(AdministrationStaffa){//對行政人員身份進(jìn)行確認(rèn) roduction(); }}

publicclassExample5_6{ publicstaticvoidmain(Stringargs[]){ Teacherteacher=newTeacher("116","林小蕾"); Studentstu=newStudent("301","張俊"); roduction(); roduction(); AdministrationStaffad=newAdministrationStaff("352","劉美美"); roduction(); }}示例分析:由于本示例增加了一個行政人員類型,所以在IdentityConfirm身份確認(rèn)類中得增加一個confirm(AdministrationStaffa)方法,如果要繼續(xù)增加新的人員類型,那么還得繼承修改IdentityConfirm類,這種需要不斷修改代碼來滿足需求的方式,說明代碼的可維護(hù)性和可擴(kuò)展性極其不好。這時,我們可使用對象的多態(tài)性,以提高代碼的可維護(hù)性和可擴(kuò)展性?!颈貍渲R】1.Java多態(tài)存在的三個必要條件(1)需要有繼承關(guān)系的存在(2)需要有方法的重寫(3)需要有父類的引用指向子類對象

2.對象多態(tài)的兩種類型多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征之一。多態(tài)性是指同一個方法名可以有不同的實(shí)現(xiàn)體,即不同的方法體。

3.對象轉(zhuǎn)型格式多態(tài)是為了實(shí)現(xiàn)接口重用,使用對象多態(tài)性,以提高代碼的可維護(hù)性和可擴(kuò)展性?!窘忸}思路】任務(wù)5-4:1.在子類Teacher類、Student類和AdministrationStaff類中重寫父類Person的say()方法,具有不同的方法體。2.定義一個身份確認(rèn)類IdentityConfirm,在該類添加一個對說話內(nèi)容進(jìn)行確認(rèn)的confirm方法,形參類型是父類Person類型,方法體對say方法進(jìn)行調(diào)用。此時,所有的子類類型都可以作為參數(shù)傳入。這樣,就不必像示例5那樣需要為每一個子類類型編寫單獨(dú)的confirm方法。3.在主方法中,調(diào)用IdentityConfirm類的confirm方法時,可傳入不同的子類對象,Java虛擬機(jī)會根據(jù)不同的對象去調(diào)用不同的say()方法。重溫任務(wù)描述【任務(wù)透析】classPerson{

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論