版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、面向?qū)ο蟮腏ava實(shí)現(xiàn)-繼承和多態(tài),第十一、十二講,2,回顧,在Java程序中,代碼封裝帶給我們的好處是什么?舉例說明什么是方法重載?Java中的構(gòu)造方法與實(shí)例方法,有什么區(qū)別?,3,預(yù)習(xí)檢查,舉例說明在什么樣的情況下,需要使用到繼承?在Java程序中,多態(tài)性帶給我們的好處是什么?,4,本章任務(wù),輸出5.0教員的基本信息:使用繼承提高代碼的復(fù)用性 使用多態(tài)提高代碼的可擴(kuò)展性及可維護(hù)性,5,掌握繼承掌握super關(guān)
2、鍵字掌握多態(tài),本章目標(biāo),6,生活中的繼承 2-1,生活中,繼承的例子隨處可見,動(dòng)物,食草動(dòng)物,食肉動(dòng)物,誰是父類?誰是子類?能說出繼承的特點(diǎn)嗎?,繼承需要符合的關(guān)系:is-a,父類更通用、子類更具體,7,生活中的繼承 2-2,子類具有父類的一般特性(包括屬性和行為),以及自身特殊的特性,巴士是汽車嗎?卡車是汽車嗎?出租車是汽車嗎?,汽車,請(qǐng)問:出租車包含哪些屬性和行為呢?,8,為什么需要繼承 4-1,開發(fā)教員類,其中教員分為
3、Java教員以及.NET教員,各自的要求如下:Java教員屬性:姓名、所屬中心方法:授課(步驟:打開Eclipse、實(shí)施理論課授課)、自我介紹.NET教員屬性:姓名、所屬中心方法:授課(步驟:打開Visual studio 2005、實(shí)施理論課授課)、自我介紹,9,請(qǐng)問:以下這個(gè)解決方案中存在著什么問題?,為什么需要繼承 4-2,代碼存在重復(fù),違背了“write once, only once”的原則,10,為什么需要繼承
4、4-3,如何改進(jìn)?有沒有可能建立繼承關(guān)系,讓子類自動(dòng)繼承父類的屬性和方法?,Java教員是教員嗎?.NET教員是教員嗎?,public class Teacher {private String name; // 教員姓名private String school; // 所在中心public AccpTeacher(String myName, String
5、mySchool) {name = myName;school = mySchool;}public void giveLesson(){System.out.println("知識(shí)點(diǎn)講解");System.out.println("總結(jié)提問");} public void introduction() {System.out.println("大家好!我
6、是“ + school + "的" + name + "。"); }},現(xiàn)在,所有子類中相同的代碼都抽取到父類中了,11,為什么需要繼承 4-4,public class JavaTeacher2 extends AccpTeacher {public AccpJavaTeacher2(String myName, String mySchool) {
7、super(myName, mySchool);}public void giveLesson(){System.out.println("啟動(dòng) Eclipse");super.giveLesson();}},public class DotNetTeacher2 extends AccpTeacher {public AccpDotNetTeacher2(String myName, String
8、mySchool) {super(myName, mySchool);}public void giveLesson(){System.out.println("啟動(dòng) Visual Studio .NET");super.giveLesson();}},使用繼承,可以有效實(shí)現(xiàn)代碼復(fù)用,子類自動(dòng)繼承父類的屬性和方法,子類中不再存在重復(fù)代碼,12,如何實(shí)現(xiàn)繼承 3-1,在Java語言中,用extends關(guān)鍵
9、字來表示一個(gè)類繼承了另一個(gè)類,例如:,public class JavaTeacher2 extends Teacher {//其余代碼省略},在父類中只定義一些通用的屬性與方法,例如:,public class Teacher {private String name; // 教員姓名private String school; // 所在中心public Teacher(String myName, String
10、mySchool) {//初始化屬性值}public void giveLesson() { //授課方法的具體實(shí)現(xiàn) } public void introduction() { //自我介紹方法的具體實(shí)現(xiàn) }},13,如何實(shí)現(xiàn)繼承 3-2,子類自動(dòng)繼承父類的屬性和方法,子類中可以定義特定的屬性和方法,public class Teacher {private String name; // 教員姓名p
11、rivate String school;// 所在中心public AccpTeacher (String myName, String mySchool) {//初始化屬性值}public void giveLesson() { //授課方法的具體實(shí)現(xiàn)} public void introduction() { //自我介紹方法的具體實(shí)現(xiàn) }},public class
12、JavaTeacher2 extends AccpTeacher {public AccpJavaTeacher2(String myName, String mySchool) {super(myName, mySchool);}public void giveLesson(){System.out.println("啟動(dòng)Eclipse");super.giveLesson();}},由于giveL
13、esson()方法與父類的實(shí)現(xiàn)有所不同,因此重寫了該方法,方法重寫:子類和父類的方法具有相同的名稱、參數(shù)列表、返回類型和訪問修飾符,,,,父類中的屬性和方法可以被子類繼承,14,public class JavaTeacher2 extends Teacher {public JavaTeacher2(String myName, String mySchool) {super(myName, mySchool);}},如何實(shí)現(xiàn)
14、繼承 3-3,子類的構(gòu)造方法中,通過super關(guān)鍵字調(diào)用父類的構(gòu)造方法,方法重寫后,通過super關(guān)鍵字調(diào)用父類的方法,public class JavaTeacher2 extends Teacher {public void giveLesson(){System.out.println("啟動(dòng) Eclipse");super.giveLesson();}},15,一切類的“祖先”——Object,在J
15、ava 中,所有的Java類都直接或間接地繼承了java.lang.Object類,public class MyObject { //…},public class MyObect extends Object { //…},在Eclipse中調(diào)用MyObject對(duì)象的成員,會(huì)自動(dòng)彈出繼承自O(shè)bject的所有方法,16,小結(jié) 1,請(qǐng)編碼實(shí)現(xiàn)動(dòng)物世界的繼承關(guān)系:動(dòng)物(Animal)具有行為:吃(eat)、睡覺(
16、sleep)動(dòng)物包括:兔子(Rabbit),老虎(Tiger)這些動(dòng)物吃的行為各不相同(兔子吃草,老虎吃肉);但睡覺的行為是一致的請(qǐng)通過繼承實(shí)現(xiàn)以上需求,并編寫測試類AnimalTest進(jìn)行測試,17,為什么需要多態(tài) 5-1,在教員類的基礎(chǔ)上,開發(fā)一個(gè)類代表總部,負(fù)責(zé)對(duì)各教員進(jìn)行評(píng)估,評(píng)估內(nèi)容包括: 1、教員的自我介紹 2、教員的授課,18,為什么需要多態(tài) 5-2,public class HQ1 {public
17、 void judge(JavaTeacher2 t){t.introduction();t.giveLesson();}public void judge(DotNetTeacher2 t){t.introduction();t.giveLesson();}public static void main(String[] args) { HQ1 hq = new HQ1();hq.judge(new JavaTea
18、cher2("李明","北京中心“));hq.judge(new DotNetTeacher2("張明","天津中心“));}},第一種解決方案,大家好!我是北京中心的李明.啟動(dòng) Eclipse知識(shí)點(diǎn)講解總結(jié)提問大家好!我是天津中心的張明.啟動(dòng) Visual Studio 2005知識(shí)點(diǎn)講解總結(jié)提問,控制臺(tái)輸出,19,為什么需要多態(tài) 5-3,現(xiàn)在,升級(jí)教員
19、類,增加一種新類型:DBTeacher,該類型的教員專門負(fù)責(zé)教授數(shù)據(jù)庫,要求如下:屬性:姓名、所屬中心方法:授課(啟動(dòng)Sql Server、實(shí)施理論課授課)、自我介紹同時(shí),總部也負(fù)責(zé)對(duì)這類教員進(jìn)行評(píng)估,20,為什么需要多態(tài) 5-4,如果在第一種解決方案的基礎(chǔ)上去解決,我們需要如下兩個(gè)步驟:建立DBTeacher類修改總部類,增加方法:judge(DBTeacher t),每增加一種新的教員類型,都要修改總部類,增加相應(yīng)的j
20、udge(評(píng)估)方法,代碼的可擴(kuò)展性及可維護(hù)性極差,能找到這個(gè)解決方案的弊端嗎?,21,為什么需要多態(tài) 5-5,第二種解決方案——使用多態(tài),public class HQ3 {public void judge(AccpTeacher t){t.introduction();t.giveLesson();}public static void main(String[] args) {HQ3 hq = new HQ3();
21、hq.judge(new JavaTeacher2("李明","北京中心“));hq.judge(new DotNetTeacher2("張明","天津中心"));hq.judge(new DBTeacher(“李嵐","北京中心“));}},可以接收子類類型,根據(jù)實(shí)際創(chuàng)建的對(duì)象類型調(diào)用相應(yīng)方法,大家好!我是北京中心的李明.啟動(dòng) E
22、clipse知識(shí)點(diǎn)講解總結(jié)提問大家好!我是天津中心的張明.啟動(dòng) Visual Studio 2005知識(shí)點(diǎn)講解總結(jié)提問大家好!我是北京中心的李嵐.啟動(dòng) Sql Server知識(shí)點(diǎn)講解總結(jié)提問,控制臺(tái)輸出,使用多態(tài)之后,當(dāng)需要增加新的子類類型時(shí),無需更改總部類,程序的可擴(kuò)展性及可維護(hù)性增強(qiáng),22,,,什么是多態(tài),簡單來說,多態(tài)是具有表現(xiàn)多種形態(tài)的能力的特征 同一個(gè)實(shí)現(xiàn)接口,使用不同的實(shí)例而執(zhí)行不同操作,彩色打印機(jī)
23、,打印機(jī),黑白打印機(jī),打印效果:彩色,打印效果:黑白,打印,打印,,,23,public class Teacher { public void giveLesson(){ System.out.println("知識(shí)點(diǎn)講解"); System.out.println("總結(jié)提問"); }},如何實(shí)現(xiàn)多態(tài),1、子類重寫父類的方法2、編寫方法時(shí),調(diào)
24、用父類定義的方法3、運(yùn)行時(shí),根據(jù)實(shí)際創(chuàng)建的對(duì)象類型動(dòng)態(tài)決定使用哪個(gè)方法,24,小結(jié) 2,請(qǐng)編碼實(shí)現(xiàn)如下需求:樂器(Instrument)分為:鋼琴(Piano)、小提琴(Violin)各種樂器的彈奏( play )方法各不相同編寫一個(gè)測試類InstrumentTest,要求:編寫方法testPlay,對(duì)各種樂器進(jìn)行彈奏測試。要依據(jù)樂器的不同,進(jìn)行相應(yīng)的彈奏在main方法中進(jìn)行測試,25,總結(jié) 2-1,class Base {
25、public String name;public Base(){name = "Base";}public Base(String pName){name = pName;}public void method(){System.out.println(name);}},class Child extends Base{public Child(){super("Child1&q
26、uot;);name="Child2";}},給定如下Java代碼,編譯運(yùn)行后,輸出結(jié)果是什么?,public class Sample { public static void main(String[ ] args) { Child c = new Child(); c.method(); }},Child2,控制臺(tái)輸出,1,2,3,
27、26,總結(jié) 2-2,給定如下Java代碼,編譯運(yùn)行后,輸出結(jié)果是什么?,public class Teacher {public void giveLesson(){System.out.println("知識(shí)點(diǎn)講解");}},public class DBTeacher extends Teacher {public void giveLesson(){System.out.println("
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java面向?qū)ο罂碱}和答案
- java面向?qū)ο罂偨Y(jié)
- 面向?qū)ο蟮膉ava語言練習(xí)
- java的面向?qū)ο缶幊?-------課堂筆記
- java面向?qū)ο蟮膶W(xué)習(xí)心得
- 《面向?qū)ο蟪绦蛟O(shè)計(jì)(java)》
- java面向?qū)ο鬁y試試題
- java面向?qū)ο蠼坛坦P記01
- java-面向?qū)ο蠹夹g(shù)基礎(chǔ)
- 09_java面向?qū)ο骭講義
- java的面向?qū)ο缶幊掏馕馁Y料翻譯
- java面向?qū)ο蟪绦蛟O(shè)計(jì)03類與對(duì)象
- java面向?qū)ο蟪绦蛟O(shè)計(jì)教案
- java基礎(chǔ)和面向?qū)ο竺嬖囶}
- java面向?qū)ο缶幊叹毩?xí)題答案
- java面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)--門禁系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- java考核題面向?qū)ο筮x擇題答案
評(píng)論
0/150
提交評(píng)論