版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第五章
面向?qū)ο蟪绦蛟O(shè)計(jì)與開發(fā)(一)本章目標(biāo)理解封裝掌握構(gòu)造方法掌握繼承掌握super關(guān)鍵字理解多態(tài)為什么需要封裝編寫一個(gè)類,代表教員,要求:具有屬性:姓名、年齡具有行為:自我介紹教員的最小年齡要求:24歲
publicclassTeacher1{publicStringname;//教員姓名publicintage;//年齡/***返回自我介紹的內(nèi)容*/publicStringintroduction(){return"大家好!我是"+name+",我今年"+age+"歲";}}為什么需要封裝編寫一個(gè)測試類,要求:實(shí)例化一個(gè)教員對(duì)象,并對(duì)其初始化在控制臺(tái)輸出該教員的自我介紹publicclassTeacher1Test{publicstaticvoidmain(String[]args){Teacher1teacher=newTeacher1();="李芳";teacher.age=10;System.out.println(roduction());}}要滿足教員的最小年齡要求,可以通過對(duì)屬性的封裝來實(shí)現(xiàn)大家好!我是李芳,我今年10歲什么是封裝publicclassTeacher2{privateStringname;//教員姓名//返回教員姓名publicStringgetName(){
returnname;}//設(shè)定教員姓名publicvoidsetName(Stringname){
=name;}}
封裝,就是隱藏實(shí)現(xiàn)細(xì)節(jié)將屬性私有化,提供公有方法訪問私有屬性通過這些公有方法訪問私有屬性Teacher2teacher=newTeacher2();teacher.setName("李芳");StringtName=teacher.getName();通過setter、getter方法訪問name屬性this代表當(dāng)前類的實(shí)例如何實(shí)現(xiàn)封裝封裝的實(shí)現(xiàn):1、修改屬性的可見性來限制對(duì)屬性的訪問2、為每個(gè)屬性創(chuàng)建一對(duì)賦值(setter)方法和取值(getter)方法,用于對(duì)這些屬性的訪問3、在setter和getter方法中,加入對(duì)屬性的存取限制publicclassTeacher3{privateStringname;//教員姓名privateintage;//年齡publicintgetAge(){ returnage;}publicvoidsetAge(intage){if(age<22){System.out.println("錯(cuò)誤!最小年齡應(yīng)為22歲!");this.age=22;//如果不符合年齡要求,則賦予默認(rèn)值}else{this.age=age;}}//此處省略對(duì)name屬性的setter、getter方法}123為什么需要構(gòu)造方法教員類Teacher4,要求:具有屬性:姓名、年齡、學(xué)歷、職位具有行為:自我介紹publicclassTeacher4{privateStringname;//姓名privateintage;//年齡privateStringeducation;//學(xué)歷privateStringposition;//職位publicStringintroduction(){return"大家好!我是"+name+",我今年"+age+"歲,學(xué)歷"
+education+",目前職位是"+position;}publicStringgetName(){ returnname;}publicvoidsetName(StringmyName){ name=myName;}//以下是其他屬性的setter、getter方法,此處省略}為什么需要構(gòu)造方法編寫一個(gè)測試類,要求:實(shí)例化一個(gè)教員對(duì)象,并對(duì)其初始化在控制臺(tái)輸出該教員的自我介紹publicclassTeacher4Test{publicstaticvoidmain(String[]args){Teacher4teacher=newTeacher4();teacher.setName("李芳");teacher.setAge(23);teacher.setEducation("本科");System.out.println(roduction());}}要簡化對(duì)象初始化的代碼,可以通過構(gòu)造方法來解決大家好!我是李芳,我今年25歲,學(xué)歷本科,目前職位是nullTeacher4中有太多的屬性及對(duì)應(yīng)的setter方法,在初始化時(shí),很容易就忘記了,有沒有可能簡化對(duì)象初始化的代碼?什么是構(gòu)造方法構(gòu)造方法負(fù)責(zé)對(duì)象成員的初始化工作,為實(shí)例變量賦予合適的初始值構(gòu)造方法必須滿足以下語法規(guī)則:
1、構(gòu)造方法是一個(gè)特殊的方法2、方法名與類名相同3、沒有返回類型publicclassTeacher5{privateStringname;//教員姓名//構(gòu)造方法publicTeacher5(){name="無名氏";}}publicclassTeacher5Test{publicstaticvoidmain(String[]args){ Teacher5teacher=newTeacher5();}}使用new關(guān)鍵字調(diào)用構(gòu)造方法調(diào)用構(gòu)造方法當(dāng)一個(gè)類中沒有顯示的定義構(gòu)造方法時(shí),類中存在一個(gè)默認(rèn)的無參的構(gòu)造方法publicTeacher5(){}帶參數(shù)的構(gòu)造方法通過帶參數(shù)的構(gòu)造方法,顯式地為實(shí)例變量賦予初始值publicclassTeacher6{privateStringname;//教員姓名privateintage;//年齡privateStringeducation;//學(xué)歷privateStringposition;//職位//帶參數(shù)的構(gòu)造方法publicTeacher6(StringpName,intpAge, StringpEducation,StringpPosition){name=pName;age=pAge;//可以增加對(duì)age等屬性的存取限制條件education=pEducation;position=pPosition;}publicStringintroduction(){return"大家好!我是"+name+",我今年"+age+"歲,學(xué)歷"+education+",目前職位是"+position;}}帶參數(shù)的構(gòu)造方法通過調(diào)用帶參數(shù)的構(gòu)造方法,簡化對(duì)象初始化的代碼publicclassTeacher6Test{publicstaticvoidmain(String[]args){Teacher6teacher=newTeacher6("李芳",23,"本科","咨詢師");System.out.println(roduction());}}創(chuàng)建對(duì)象時(shí),一并完成了對(duì)象成員的初始化工作大家好!我是李芳,我今年23歲,學(xué)歷本科,目前職位是咨詢師當(dāng)在類中顯示的定義了構(gòu)造方法后默認(rèn)的無參數(shù)的構(gòu)造方法自動(dòng)消失生活中的方法重載類方法方法參數(shù)方法實(shí)現(xiàn)司機(jī)轎車巴士火車駕駛啟動(dòng)、行駛、……等待乘客上車、啟動(dòng)、行駛、到站停車、……正點(diǎn)發(fā)車、行駛、到站停車、……如果用代碼實(shí)現(xiàn),我們需要三個(gè)方法,這些方法的方法名稱相同,參數(shù)類型不同方法重載的代碼示例方法重載并不陌生java.io.PrintStream類的println方法能夠打印數(shù)據(jù)并換行,根據(jù)數(shù)據(jù)類型的不同,有多種實(shí)現(xiàn)方式publicclassTest{publicstaticvoidmain(String[]args){inti=0;charc='z';Stringstr="hello";System.out.println(i);System.out.println(c);System.out.println(str);}}PrintStreamprintln(int)println(char)println(String)……方法名相同,參數(shù)類型不同調(diào)用不同的println方法方法重載方法重載的代碼示例java.lang.Math類的max()方法能夠從兩個(gè)數(shù)字中取出最大值,它有多種實(shí)現(xiàn)方式運(yùn)行時(shí),Java虛擬機(jī)先判斷給定參數(shù)的類型,然后決定到底執(zhí)行哪個(gè)max()方法Mathmax(inta,intb)max(floata,floatb)max(longa,longb)max(doublea,doubleb)publicclassTest{publicstaticvoidmain(String[]args){Math.max(1,2);Math.max(1.0F,2.0F);Math.max(1.0,2);}}方法重載構(gòu)造方法重載構(gòu)造方法重載是方法重載的典型示例publicclassTeacher7{privateStringname;//教員姓名privateStringschool=“西安加中”;//所在學(xué)校publicTeacher7(Stringname){ =name;//設(shè)定教員姓名}publicTeacher7(Stringname,Stringschool){=name;//設(shè)定教員姓名this.school=school;//設(shè)定教員的所在學(xué)校}publicStringintroduction(){ return"大家好!我是"+school+"的"+name;}}構(gòu)造方法重載構(gòu)造方法重載通過調(diào)用不同的構(gòu)造方法來表達(dá)對(duì)象的多種初始化行為例如:默認(rèn)情況下,教師來自西安,初始化時(shí),只需提供教員姓名有時(shí),需要提供所在學(xué)校名稱及教員姓名publicclassTeacher7Test{publicstaticvoidmain(String[]args){ Teacher7teacher1=newTeacher7("李芳");System.out.println(roduction());Teacher7teacher2=newTeacher7("張欣",
“成都加中");System.out.println(roduction());}}大家好!我是西安加中的李芳大家好!我是成都加中的張欣給定如下Java代碼,請(qǐng)指出代碼中的錯(cuò)誤,并解釋原因publicclassSample{privateintx;publicSample(){ x=1;}publicSample(inti){ x=i;}publicintSample(inti){x=i;returnx++;}privateSample(inti,Strings){}publicSample(Strings,inti){}privateSampla(inti){ x=i++;}privatevoidSampla(inti){ x=i++;}}小結(jié)無參構(gòu)造方法帶參構(gòu)造方法不是構(gòu)造方法帶參構(gòu)造方法帶參構(gòu)造方法名稱與類名不相同不是構(gòu)造方法生活中的繼承生活中,繼承的例子隨處可見動(dòng)物食草動(dòng)物食肉動(dòng)物誰是父類?誰是子類?能說出繼承的特點(diǎn)嗎?繼承需要符合的關(guān)系:is-a,父類更通用、子類更具體生活中的繼承子類具有父類的一般特性(包括屬性和行為),以及自身特殊的特性巴士是汽車嗎?卡車是汽車嗎?出租車是汽車嗎?最大載客數(shù)量報(bào)站引擎數(shù)量外觀顏色剎車加速汽車最大載重量卸貨所屬公司最大載客數(shù)量打發(fā)票屬性行為請(qǐng)問:出租車包含哪些屬性和行為呢?為什么需要繼承開發(fā)教員類,其中教員分為Java教員以及.NET教員,各自的要求如下:Java教員屬性:姓名、所屬學(xué)校方法:授課(步驟:打開Eclipse、實(shí)施理論課授課)、自我介紹.NET教員屬性:姓名、所屬學(xué)校方法:授課(步驟:打開Visualstudio2005、實(shí)施理論課授課)、自我介紹請(qǐng)問:以下這個(gè)解決方案中存在著什么問題?為什么需要繼承publicclassDotNetTeacher{privateStringname;//教員姓名privateStringschool;//所在學(xué)校publicAccpDotNetTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLession(){System.out.println("啟動(dòng)
VisualStudio2005");System.out.println("知識(shí)點(diǎn)講解");System.out.println("總結(jié)提問");}publicvoidintroduction(){ System.out.println("大家好!我是" +school+"的"+name+".");}}publicclassJavaTeacher{privateStringname;//教員姓名privateStringschool;//所在學(xué)校publicAccpJavaTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLession(){System.out.println("啟動(dòng)
Eclipse");System.out.println("知識(shí)點(diǎn)講解");System.out.println("總結(jié)提問");}publicvoidintroduction(){ System.out.println("大家好!我是" +school+"的"+name+".");}}代碼存在重復(fù),違背了“writeonce,onlyonce”的原則為什么需要繼承如何改進(jìn)?有沒有可能建立繼承關(guān)系,讓子類自動(dòng)繼承父類的屬性和方法?Java教員是教員嗎?.NET教員是教員嗎?publicclassTeacher{privateStringname;//教員姓名privateStringschool;//所在學(xué)校publicAccpTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLesson(){System.out.println("知識(shí)點(diǎn)講解");System.out.println("總結(jié)提問");}publicvoidintroduction(){ System.out.println("大家好!我是“
+school+"的"+name+"。");}}現(xiàn)在,所有子類中相同的代碼都抽取到父類中了屬
性行
為姓名所在學(xué)校授課自我介紹教員Java教員.NET教員為什么需要繼承publicclassJavaTeacher2extendsTeacher{publicJavaTeacher2(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("啟動(dòng)Eclipse");super.giveLesson();}}publicclassDotNetTeacher2extendsTeacher{publicDotNetTeacher2(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("啟動(dòng)VisualStudio.NET");super.giveLesson();}}使用繼承,可以有效實(shí)現(xiàn)代碼復(fù)用子類自動(dòng)繼承父類的屬性和方法,子類中不再存在重復(fù)代碼繼承的特點(diǎn)繼承的特點(diǎn)具有層次結(jié)構(gòu)子類繼承了父類的屬性和方法繼承的優(yōu)點(diǎn)繼承的優(yōu)點(diǎn)代碼的可重用性父類的屬性和方法可用于子類設(shè)計(jì)應(yīng)用程序變得更加簡單可以輕松地自定義子類如何實(shí)現(xiàn)繼承在Java語言中,用extends關(guān)鍵字來表示一個(gè)類繼承了另一個(gè)類,例如:publicclassJavaTeacher2extendsTeacher{//其余代碼省略}在父類中只定義一些通用的屬性與方法,例如:publicclassTeacher{privateStringname;//教員姓名privateStringschool;//所在中心publicTeacher(StringmyName,StringmySchool){//初始化屬性值}publicvoidgiveLesson(){//授課方法的具體實(shí)現(xiàn)}publicvoidintroduction(){//自我介紹方法的具體實(shí)現(xiàn)
}}如何實(shí)現(xiàn)繼承子類自動(dòng)繼承父類的屬性和方法,子類中可以定義特定的屬性和方法publicclassTeacher{privateStringname;//教員姓名privateStringschool;//所在中心publicTeacher(StringmyName,StringmySchool){//初始化屬性值}publicvoidgiveLesson(){ //授課方法的具體實(shí)現(xiàn)}publicvoidintroduction(){ //自我介紹方法的具體實(shí)現(xiàn)
}}publicclassJavaTeacher2extendsAccpTeacher{publicJavaTeacher2(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("啟動(dòng)Eclipse");super.giveLesson();}}由于giveLesson()方法與父類的實(shí)現(xiàn)有所不同,因此重寫了該方法方法重寫:子類和父類的方法具有相同的名稱、參數(shù)列表、返回類型和訪問修飾符父類中的屬性和方法可以被子類繼承publicclassJavaTeacher2extendsTeacher{publicJavaTeacher2(StringmyName,StringmySchool){super(myName,mySchool);}}如何實(shí)現(xiàn)繼承子類的構(gòu)造方法中,通過super關(guān)鍵字調(diào)用父類的構(gòu)造方法方法重寫后,通過super關(guān)鍵字調(diào)用父類的方法publicclassJavaTeacher2extendsTeacher{publicvoidgiveLesson(){System.out.println("啟動(dòng)Eclipse");super.giveLesson();}}通過調(diào)用父類的構(gòu)造方法,完成對(duì)屬性值的初始化一切類的“祖先”——Object在Java中,所有的Java類都直接或間接地繼承了java.lang.Object類publicclassMyObject{//…}publicclassMyObectextendsObject{
//…}在Eclipse中調(diào)用MyObject對(duì)象的成員,會(huì)自動(dòng)彈出繼承自O(shè)bject的所有方法小結(jié)請(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)以上需求,并編寫測試類AnimalTest進(jìn)行測試完整代碼實(shí)現(xiàn)為什么需要多態(tài)在教員類的基礎(chǔ)上,開發(fā)一個(gè)類代表總部,負(fù)責(zé)對(duì)各教員進(jìn)行評(píng)估,評(píng)估內(nèi)容包括:
1、教員的自我介紹
2、教員的授課為什么需要多態(tài)publicclassHQ1{publicvoidjudge(JavaTeacher2t){roduction();t.giveLesson();}publicvoidjudge(DotNetTeacher2t){roduction();t.giveLesson();}publicstaticvoidmain(String[]args){HQ1hq=newHQ1();hq.judge(newJavaTeacher2(“李明”,“西安加中“));hq.judge(newDotNetTeacher2(“張明”,“無錫加中“));}}第一種解決方案大家好!我是西安加中的李明.啟動(dòng)Eclipse知識(shí)點(diǎn)講解總結(jié)提問大家好!我是無錫加中的張明.啟動(dòng)VisualStudio2005知識(shí)點(diǎn)講解總結(jié)提問控制臺(tái)輸出為什么需要多態(tài)現(xiàn)在,升級(jí)教員類,增加一種新類型:DBTeacher,該類型的教員專門負(fù)責(zé)教授數(shù)據(jù)庫,要求如下:屬性:姓名、所屬學(xué)校方法:授課(啟動(dòng)SqlServer、實(shí)施理論課授課)、自我介紹同時(shí),總部也負(fù)責(zé)對(duì)這類教員進(jìn)行評(píng)估為什么需要多態(tài)如果在第一種解決方案的基礎(chǔ)上去解決,我們需要如下兩個(gè)步驟:建立DBTeacher類修改總部類,增加方法:judge(DBTeachert)每增加一種新的教員類型,都要修改總部類,增加相應(yīng)的judge(評(píng)估)方法,代碼的可擴(kuò)展性及可維護(hù)性極差能找到這個(gè)解決方案的弊端嗎?完整代碼實(shí)現(xiàn)總部類完整代碼實(shí)現(xiàn)為什么需要多態(tài)第二種解決方案——使用多態(tài)publicclassHQ3{publicvoidjudge(Teachert){roduction();t.giveLesson();}publicstaticvoidmain(String[]args){HQ3hq=newHQ3();hq.judge(newJavaTeacher2("李明","北京中心“)); hq.judge(newDotNetTeacher2("張明","天津中心")); hq.judge(newDBTeacher(“李嵐","北京中心“));}}可以接收子類類型根據(jù)實(shí)際創(chuàng)建的對(duì)象類型調(diào)用相應(yīng)方法大家好!我是北京中心的李明.啟動(dòng)Eclipse知識(shí)點(diǎn)講解總結(jié)提問大家好!我是天津中心的張明.啟動(dòng)VisualStudio2005知識(shí)點(diǎn)講解總結(jié)提問大家好!我是北京中心的李嵐.啟動(dòng)SqlServer知識(shí)點(diǎn)講解總結(jié)提問控制臺(tái)輸出使用多態(tài)之后,當(dāng)需要增加新的子類類型時(shí),無需更改總部類,程序的可擴(kuò)展性及可維護(hù)性增強(qiáng)什么是多態(tài)簡單來說,多態(tài)是具有表現(xiàn)多種形態(tài)的能力的特征同一個(gè)實(shí)現(xiàn)接口,使用不同的實(shí)例而執(zhí)行不同操作彩色打印機(jī)打印機(jī)黑白打印機(jī)打印效果:彩色打印效果:黑白打印打印publicclassTeacher{publicvoidgiveLesson(){
System.out.println("知識(shí)點(diǎn)講解");System.out.println("總結(jié)提問");
}}publicclassTest{publicstaticvoidmain(String[]args){
HQ3hq=newHQ3();hq.judge(newDBTeacher());}}3如何實(shí)現(xiàn)多態(tài)1、子類重寫父類的方法2、編寫方法時(shí),調(diào)用父類定義的方法3、運(yùn)行時(shí),根據(jù)實(shí)際創(chuàng)建的對(duì)象類型動(dòng)態(tài)決定使用哪個(gè)方法publicclassDBTeacherextendsAccpTeacher{publicvoidgiveLesson(){
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 受資助學(xué)生典型事跡材料范文(14篇)
- 文物數(shù)字化與5G技術(shù)應(yīng)用-洞察分析
- 微笑線與年齡相關(guān)性-洞察分析
- 栓子催化技術(shù)進(jìn)展-洞察分析
- 勤儉節(jié)約先進(jìn)事跡材料(范文8篇)
- 網(wǎng)絡(luò)拓?fù)溲莼治?洞察分析
- 消費(fèi)者價(jià)值共創(chuàng)研究-洞察分析
- 營銷組合策略在批發(fā)零售中的應(yīng)用-洞察分析
- 醫(yī)療保險(xiǎn)個(gè)人工作總結(jié)(5篇)
- 搜索心理干預(yù)策略-洞察分析
- 青年應(yīng)有鴻鵠志當(dāng)騎駿馬踏平川課件高三上學(xué)期勵(lì)志主題班會(huì)
- 河北省唐山市2021-2022學(xué)年高三上學(xué)期語文期末試卷
- oa系統(tǒng)合同范例
- 華電甘肅能源有限公司華電系統(tǒng)內(nèi)外招聘真題
- 員工宿舍管理?xiàng)l例
- 建設(shè)精神病醫(yī)院
- 《文明禮儀概述培訓(xùn)》課件
- 保險(xiǎn)金信托課件
- 新疆大學(xué)答辯模板課件模板
- 數(shù)值分析智慧樹知到期末考試答案2024年
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計(jì)規(guī)范
評(píng)論
0/150
提交評(píng)論