版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 2 回顧 在Java程序中,代碼封裝帶給我們的 好處是什么? 舉例說(shuō)明什么是方法重載? Java中的構(gòu)造方法與實(shí)例方法,有什 么區(qū)別? 3 掌握繼承 掌握super關(guān)鍵字 掌握多態(tài) 本章目標(biāo) 4 生活中的繼承1 生活中,繼承的例子隨處可見 動(dòng)物動(dòng)物 食草動(dòng)物食草動(dòng)物食肉動(dòng)物食肉動(dòng)物 誰(shuí)是父類?誰(shuí)是父類? 誰(shuí)是子類?誰(shuí)是子類? 能說(shuō)出繼承的特點(diǎn)嗎?能說(shuō)出繼承的特點(diǎn)嗎? 繼承需要符合的關(guān)系:繼承需要符合的關(guān)系:is-a,父類更通用、子類更具體,父類更通用、子類更具體 5 生活中的繼承2 子類具有父類的一般特性(包括屬性和行 為),以及自身特殊的特性 巴士是汽車嗎?巴士是汽車嗎? 卡車是汽車嗎?卡
2、車是汽車嗎? 出租車是汽車嗎?出租車是汽車嗎? 最大載客數(shù)量最大載客數(shù)量 報(bào)站報(bào)站 引擎數(shù)量引擎數(shù)量 外觀顏色外觀顏色 剎車剎車 加速加速 汽車汽車 最大載重量最大載重量 卸貨卸貨 所屬公司所屬公司 最大載客數(shù)量最大載客數(shù)量 打發(fā)票打發(fā)票 屬性屬性 行為行為 請(qǐng)問:出租車請(qǐng)問:出租車 包含哪些屬性包含哪些屬性 和行為呢?和行為呢? 6 為什么需要繼承1 開發(fā)教員類,其中教員分為Java教員以 及.NET教員,各自的要求如下: Java教員 屬性:姓名、所屬中心屬性:姓名、所屬中心 方法:授課(步驟:打開方法:授課(步驟:打開Eclipse、實(shí)施理論課授課)、實(shí)施理論課授課)、 自我介紹自我介紹
3、 .NET教員 屬性:姓名、所屬中心屬性:姓名、所屬中心 方法:授課(步驟:打開方法:授課(步驟:打開Visual studio 2005、實(shí)施理、實(shí)施理 論課授課)、自我介紹論課授課)、自我介紹 7 請(qǐng)問:以下這個(gè)解決方案中存在著什么問 題? 為什么需要繼承 2 public class DotNetTeacher private String name; / 教員姓名教員姓名 private String school; / 所在中心所在中心 public DotNetTeacher(String myName, String mySchool) name = myName; school
4、 = mySchool; public void giveLession() System.out.println(啟動(dòng)啟動(dòng) Visual Studio 2005); System.out.println(知識(shí)點(diǎn)講解知識(shí)點(diǎn)講解); System.out.println(總結(jié)提問總結(jié)提問); public void introduction() System.out.println(大家好!我是大家好!我是 + school + 的的 + name + .); public class JavaTeacher private String name; / 教員姓名教員姓名 private Str
5、ing school; / 所在中心所在中心 public JavaTeacher(String myName, String mySchool) name = myName; school = mySchool; public void giveLession() System.out.println(啟動(dòng)啟動(dòng) Eclipse); System.out.println(知識(shí)點(diǎn)講解知識(shí)點(diǎn)講解); System.out.println(總結(jié)提問總結(jié)提問); public void introduction() System.out.println(大家好!我是大家好!我是 + school +
6、的的 + name + .); 代碼存在重復(fù),違背了代碼存在重復(fù),違背了“write once, only once”的原則的原則 8 為什么需要繼承 3 如何改進(jìn)?有沒有可能建立繼承關(guān)系,讓 子類自動(dòng)繼承父類的屬性和方法? Java教員是教員嗎?教員是教員嗎? .NET教員是教員嗎?教員是教員嗎? public class Teacher private String name; / 教員姓名教員姓名 private String school; / 所在中心所在中心 public Teacher(String myName, String mySchool) name = myName;
7、school = mySchool; public void giveLesson() System.out.println(知識(shí)點(diǎn)講解知識(shí)點(diǎn)講解); System.out.println(總結(jié)提問總結(jié)提問); public void introduction() System.out.println(大家好!我是大家好!我是 “ + school + 的的 + name + 。); 現(xiàn)在,所有子類中相同的代碼現(xiàn)在,所有子類中相同的代碼 都抽取到父類中了都抽取到父類中了 屬屬 性性 行行 為為 姓名姓名 所在中心所在中心 授課授課 自我介紹自我介紹 教員教員 Java教員教員.NET教員教員
8、9 為什么需要繼承 4-4 public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(啟動(dòng)啟動(dòng) Eclipse); super.giveLesson(); public class DotNetTeacher2 extends Teacher public AccpDotNetTeacher2(String myName, Str
9、ing mySchool) super(myName, mySchool); public void giveLesson() System.out.println(啟動(dòng)啟動(dòng) Visual Studio .NET); super.giveLesson(); 使用繼承,可以有效實(shí)現(xiàn)代碼復(fù)用使用繼承,可以有效實(shí)現(xiàn)代碼復(fù)用 子類自動(dòng)繼承父類的屬性子類自動(dòng)繼承父類的屬性 和方法,子類中不再存在和方法,子類中不再存在 重復(fù)代碼重復(fù)代碼 10 如何實(shí)現(xiàn)繼承 1 在Java語(yǔ)言中,用extends關(guān)鍵字來(lái)表示一 個(gè)類繼承了另一個(gè)類,例如: public class JavaTeacher2 extends
10、Teacher /其余代碼省略其余代碼省略 在父類中只定義一些通用的屬性與方法, 例如: public class Teacher private String name; / 教員姓名教員姓名 private String school; / 所在中心所在中心 public Teacher(String myName, String mySchool) /初始化屬性值初始化屬性值 public void giveLesson() /授課方法的具體實(shí)現(xiàn)授課方法的具體實(shí)現(xiàn) public void introduction() /自我介紹方法的具體實(shí)現(xiàn)自我介紹方法的具體實(shí)現(xiàn) 11 如何實(shí)現(xiàn)繼承 2
11、 子類自動(dòng)繼承父類的屬性和方法,子類中 可以定義特定的屬性和方法 public class Teacher private String name; / 教員姓名教員姓名 private String school;/ 所在中心所在中心 public Teacher (String myName, String mySchool) /初始化屬性值初始化屬性值 public void giveLesson() /授課方法的具體實(shí)現(xiàn)授課方法的具體實(shí)現(xiàn) public void introduction() /自我介紹方法的具體實(shí)現(xiàn)自我介紹方法的具體實(shí)現(xiàn) public class JavaTeache
12、r2 extends AccpTeacher public JavaTeacher2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(啟動(dòng)啟動(dòng)Eclipse); super.giveLesson(); 由于由于giveLesson()方法與方法與 父類的實(shí)現(xiàn)有所不同,因父類的實(shí)現(xiàn)有所不同,因 此重寫了該方法此重寫了該方法 方法重寫:子類和父類的方法具有相同的名稱、參數(shù)列表、返回類型和訪問修飾符方法重寫:子類和父類的方法具有相同的名稱、參數(shù)列表
13、、返回類型和訪問修飾符 父類中的屬性和方法可父類中的屬性和方法可 以被子類繼承以被子類繼承 12 public class JavaTeacher2 extends Teacher public AccpJavaTeacher2(String myName, String mySchool) super(myName, mySchool); 如何實(shí)現(xiàn)繼承 3 子類的構(gòu)造方法中,通過super關(guān)鍵字調(diào)用 父類的構(gòu)造方法 方法重寫后,通過super關(guān)鍵字調(diào)用父類 的方法 public class JavaTeacher2 extends Teacher public void giveLesson
14、() System.out.println(啟動(dòng)啟動(dòng) Eclipse); super.giveLesson(); 通過調(diào)用父類的構(gòu)造方法,通過調(diào)用父類的構(gòu)造方法, 完成對(duì)屬性值的初始化完成對(duì)屬性值的初始化 13 一切類的“祖先”O(jiān)bject 在Java 中,所有的Java類都直接或間接地 繼承了java.lang.Object類 public class MyObject / public class MyObect extends Object / 在在Eclipse中調(diào)用中調(diào)用MyObject 對(duì)象的成員,會(huì)自動(dòng)彈出繼對(duì)象的成員,會(huì)自動(dòng)彈出繼 承自承自O(shè)bject的所有方法的所有方法 14
15、 小結(jié) 1 請(qǐng)編碼實(shí)現(xiàn)動(dòng)物世界的繼承關(guān)系: 動(dòng)物(Animal)具有行為:吃(eat)、 睡覺(sleep) 動(dòng)物包括:兔子(Rabbit),老虎 (Tiger) 這些動(dòng)物吃的行為各不相同(兔子吃草, 老虎吃肉);但睡覺的行為是一致的 請(qǐng)通過繼承實(shí)現(xiàn)以上需求,并編寫測(cè) 試類AnimalTest進(jìn)行測(cè)試 15 為什么需要多態(tài) 1 在教員類的基礎(chǔ)上,開發(fā)一個(gè)類代表總 部,負(fù)責(zé)對(duì)各教員進(jìn)行評(píng)估,評(píng)估內(nèi)容 包括: 1、教員的自我介紹 2、教員的授課 16 為什么需要多態(tài) 2 public class HQ1 public void judge(JavaTeacher2 t) roductio
16、n(); t.giveLesson(); public void judge(DotNetTeacher2 t) roduction(); t.giveLesson(); public static void main(String args) HQ1 hq = new HQ1(); hq.judge(new JavaTeacher2(李明李明,北京中心北京中心“); hq.judge(new DotNetTeacher2(張明張明,天津中心天津中心“); 第一種解決方案 大家好!我是北京中心的李明大家好!我是北京中心的李明. 啟動(dòng)啟動(dòng) Eclipse 知識(shí)點(diǎn)講解知識(shí)點(diǎn)講解 總結(jié)提問
17、總結(jié)提問 大家好!我是天津中心的張明大家好!我是天津中心的張明. 啟動(dòng)啟動(dòng) Visual Studio 2005 知識(shí)點(diǎn)講解知識(shí)點(diǎn)講解 總結(jié)提問總結(jié)提問 控制臺(tái)輸出控制臺(tái)輸出 17 為什么需要多態(tài) 3 現(xiàn)在,升級(jí)教員類,增加一種新類型: DBTeacher,該類型的教員專門負(fù)責(zé)教授 數(shù)據(jù)庫(kù),要求如下: 屬性:姓名、所屬中心 方法:授課(啟動(dòng)Sql Server、實(shí)施理論課授 課)、自我介紹 同時(shí),總部也負(fù)責(zé)對(duì)這類教員進(jìn)行評(píng)估 18 為什么需要多態(tài) 4 如果在第一種解決方案的基礎(chǔ)上去解決, 我們需要如下兩個(gè)步驟: 建立DBTeacher類 修改總部類,增加方法:judge(DBTeacher t
18、) 每增加一種新的教員類型,都要修改總部類,增加相應(yīng)的每增加一種新的教員類型,都要修改總部類,增加相應(yīng)的 judge(評(píng)估評(píng)估)方法,代碼的可擴(kuò)展性及可維護(hù)性極差方法,代碼的可擴(kuò)展性及可維護(hù)性極差 能找到這個(gè)解決方案的弊端嗎?能找到這個(gè)解決方案的弊端嗎? 19 為什么需要多態(tài) 5 第二種解決方案使用多態(tài) public class HQ3 public void judge(Teacher t) roduction(); t.giveLesson(); public static void main(String args) HQ3 hq = new HQ3(); hq.judge(n
19、ew JavaTeacher2(李明李明,北京中心北京中心“); hq.judge(new DotNetTeacher2(張明張明,天津中心天津中心); hq.judge(new DBTeacher(“李嵐李嵐,北京中心北京中心“); 可以接收子類類型可以接收子類類型 根據(jù)實(shí)際創(chuàng)建的對(duì)象根據(jù)實(shí)際創(chuàng)建的對(duì)象 類型調(diào)用相應(yīng)方法類型調(diào)用相應(yīng)方法 大家好!我是北京中心的李明大家好!我是北京中心的李明. 啟動(dòng)啟動(dòng) Eclipse 知識(shí)點(diǎn)講解知識(shí)點(diǎn)講解 總結(jié)提問總結(jié)提問 大家好!我是天津中心的張明大家好!我是天津中心的張明. 啟動(dòng)啟動(dòng) Visual Studio 2005 知識(shí)點(diǎn)講解知識(shí)點(diǎn)講解 總結(jié)提問總
20、結(jié)提問 大家好!我是北京中心的李嵐大家好!我是北京中心的李嵐. 啟動(dòng)啟動(dòng) Sql Server 知識(shí)點(diǎn)講解知識(shí)點(diǎn)講解 總結(jié)提問總結(jié)提問 控制臺(tái)輸出控制臺(tái)輸出 使用多態(tài)之后,當(dāng)需要增加新的子類類型 時(shí),無(wú)需更改總部類,程序的可擴(kuò)展性及 可維護(hù)性增強(qiáng) 20 什么是多態(tài) 簡(jiǎn)單來(lái)說(shuō),多態(tài)是具有表現(xiàn)多種形態(tài)的能 力的特征 同一個(gè)實(shí)現(xiàn)接口,使用不同的實(shí)例而執(zhí)行 不同操作 彩色打印機(jī)彩色打印機(jī) 打印機(jī)打印機(jī) 黑白打印機(jī)黑白打印機(jī) 打印效果:彩色打印效果:彩色 打印效果:黑白打印效果:黑白 打印打印 打印打印 21 public class Teacher public void giveLesson() S
21、ystem.out.println(知識(shí)點(diǎn)講解知識(shí)點(diǎn)講解); System.out.println(總結(jié)提問總結(jié)提問); public class Test public static void main(String args) HQ3 hq = new HQ3(); hq.judge(new DBTeacher(); 3 如何實(shí)現(xiàn)多態(tài) 1、子類重寫父類的方法 2、把父類型作為參數(shù),該父類及其子類對(duì)象作為參數(shù)傳入 3、運(yùn)行時(shí),根據(jù)實(shí)際創(chuàng)建的對(duì)象類型動(dòng)態(tài)決定使用哪個(gè)方法 public class DBTeacher extends Teacher public void giveLesson() System.out.println(啟動(dòng)啟動(dòng) SqlServer); super.giveLesson(); 1 public class HQ3 public void judge(Teacher t) t.giveLesson(); 2 22 小結(jié) 2 請(qǐng)編碼實(shí)現(xiàn)如下需求: 樂器(Instrument)分為:鋼琴(Piano)、小 提琴(Violin) 各種樂器的彈奏( play )方法各不相同 編寫一個(gè)測(cè)試類InstrumentTest,要求: 編寫方法testPlay,對(duì)各種樂器進(jìn)行彈奏測(cè) 試。要依據(jù)樂器的不同
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 磨砂裝訂封面行業(yè)行業(yè)發(fā)展趨勢(shì)及投資戰(zhàn)略研究分析報(bào)告
- 磨沙板項(xiàng)目可行性研究報(bào)告
- 2025年中國(guó)連鎖酒店行業(yè)市場(chǎng)調(diào)研分析及投資戰(zhàn)略咨詢報(bào)告
- 物流運(yùn)輸項(xiàng)目可行性研究報(bào)告申請(qǐng)備案
- 湖北省武漢市東西湖區(qū)2024年中考語(yǔ)文模擬檢測(cè)試卷含答案
- 普通手機(jī)背光源行業(yè)行業(yè)發(fā)展趨勢(shì)及投資戰(zhàn)略研究分析報(bào)告
- 2023-2028年中國(guó)語(yǔ)言早教行業(yè)市場(chǎng)深度評(píng)估及投資方向研究報(bào)告
- 苜蓿良種繁育基地建設(shè)項(xiàng)目可行性研究報(bào)告
- 2025年男裝項(xiàng)目可行性研究報(bào)告
- 中國(guó)防護(hù)保養(yǎng)品行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 生姜的產(chǎn)地分布
- 普通高中學(xué)業(yè)水平合格性考試(會(huì)考)語(yǔ)文試題(附答案)
- 統(tǒng)編語(yǔ)文八上文言文過關(guān)小測(cè)驗(yàn)-《愚公移山》
- 12、口腔科診療指南及技術(shù)操作規(guī)范
- 醫(yī)藥電商行業(yè)發(fā)展趨勢(shì)報(bào)告
- 2020年10月自考00020高等數(shù)學(xué)一高數(shù)一試題及答案含評(píng)分標(biāo)準(zhǔn)
- 勞務(wù)派遣方案
- 電費(fèi)異常問題篩選及處理途徑
- 幼兒園中班語(yǔ)言繪本《三只蝴蝶》課件
- 高中英語(yǔ)校本教材《英語(yǔ)美文閱讀與欣賞》
- 深邃的世界:西方繪畫中的科學(xué)學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫(kù)2023年
評(píng)論
0/150
提交評(píng)論