版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第4章 面向?qū)ο缶幊?繼承和方法,2,回顧:,創(chuàng)建一個類 Circle,其中有: 一個成員變量 r(半徑) 一個方法 clength,能求圓周長 一個方法 carea,能求圓面積 并建立該類的一個對象:一個半徑為5的圓,并輸出該圓的周長和面積。,3,收到作業(yè)中解決方法:,public class Circle int r=5; double PI=3.14; public void getClength() System.out.println(“圓的面積是:+PI*r*r); public void getArea() System.out.println(圓的周長是:+2*PI*r); ,
2、4,public static void main(String args) Circle cc=new Circle(); cc.getClength(); cc.getArea(); ,5,繼承,6,生活中的繼承,生活中,繼承的例子隨處可見,誰是父類? 誰是子類? 能說出繼承的特點(diǎn)嗎?,繼承需要符合的關(guān)系:父類更通用、子類更具體,7,生活中的繼承,子類具有父類的一般特性(包括屬性和行為),以及自身特殊的特性,巴士是汽車嗎? 卡車是汽車嗎? 出租車是汽車嗎?,汽車,請問:出租車包含哪些屬性和行為呢?,8,為什么需要繼承?,開發(fā)教師類,其中教師分為Java教師以及.NET教師,各自的要求如下:
3、 Java教師 屬性:姓名、所屬教研室 方法:授課(步驟:打開Eclipse、實(shí)施理論課授課)、自我介紹 .NET教師 屬性:姓名、所屬教研室 方法:授課(步驟:打開Visual studio 2005、實(shí)施理論課授課)、自我介紹,9,請問:以下這個解決方案中存在著什么問題?,為什么需要繼承?,代碼存在重復(fù),違背了“write once, only once”的原則,10,如何改進(jìn)?有沒有可能建立繼承關(guān)系,讓子類自動繼承父類的屬性和方法?,Java教師是教師嗎? .NET教師是教師嗎?,public class Teacher private String name; / 教師姓名 priva
4、te String department; / 教研室 public Teacher(String myName, String myDepart) name = myName; department = myDepart; public void giveLesson() System.out.println(知識點(diǎn)講解); System.out.println(總結(jié)提問); public void introduction() System.out.println(大家好!我是“ + department + 的 + name + 。); ,現(xiàn)在,所有子類中相同的代碼都抽取到父類中了,11
5、,為什么需要繼承 4-4,public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String myDepart) super(myName, myDepart); public void giveLesson() System.out.println(啟動 Eclipse); super.giveLesson(); ,public class DotNetTeacher2 extends Teacher public DotNetTeacher2(String myName, String my
6、Depart) super(myName, myDepart); public void giveLesson() System.out.println(啟動 Visual Studio .NET); super.giveLesson(); ,使用繼承,可以有效實(shí)現(xiàn)代碼復(fù)用,子類自動繼承父類的屬性和方法,子類中不再存在重復(fù)代碼,12,如何實(shí)現(xiàn)繼承?,在Java語言中,用extends關(guān)鍵字來表示一個類繼承了另一個類,例如:,public class JavaTeacher2 extends AccpTeacher /其余代碼省略 ,在父類中只定義一些通用的屬性與方法,例如:,public cl
7、ass Teacher private String name; / 教師姓名 private String department; / 所在教研室 public Teacher(String myName, String myDepart) /初始化屬性值 public void giveLesson() /授課方法的具體實(shí)現(xiàn) public void introduction() /自我介紹方法的具體實(shí)現(xiàn) ,13,如何實(shí)現(xiàn)繼承,子類自動繼承父類的屬性和方法,子類中可以定義特定的屬性和方法,public class Teacher String name; / 教師姓名 String depa
8、rtment;/ 所在教研室 public Teacher (String myName, String myDepart) /初始化屬性值 public void giveLesson() /授課方法的具體實(shí)現(xiàn) public void introduction() /自我介紹方法的具體實(shí)現(xiàn) ,public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String myDepart) super(myName, myDepart); public void giveLesson() System.o
9、ut.println(啟動Eclipse); super.giveLesson(); ,由于giveLesson()方法與父類的實(shí)現(xiàn)有所不同,因此重寫了該方法,方法重寫:子類和父類的方法具有相同的名稱、參數(shù)列表、返回類型,父類中的屬性和方法可以被子類繼承,14,public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String myDepart) super(myName, myDepart); ,如何實(shí)現(xiàn)繼承?,子類的構(gòu)造方法中,通過super關(guān)鍵字調(diào)用父類的構(gòu)造方法,方法重寫后,通過supe
10、r關(guān)鍵字調(diào)用父類的方法,public class JavaTeacher2 extendsTeacher public void giveLesson() System.out.println(啟動 Eclipse); super.giveLesson(); ,通過調(diào)用父類的構(gòu)造方法,完成對屬性值的初始化,15,一切類的“祖先”O(jiān)bject,在Java 中,所有的Java類都直接或間接地繼承了java.lang.Object類,public class MyObject / ,public class MyObect extends Object / ,在Eclipse中調(diào)用MyObject對
11、象的成員,會自動彈出繼承自O(shè)bject的所有方法,16,小結(jié) 1,請編碼實(shí)現(xiàn)動物世界的繼承關(guān)系: 動物(Animal)具有行為:吃(eat)、睡覺(sleep) 動物包括:兔子(Rabbit),老虎(Tiger) 這些動物吃的行為各不相同(兔子吃草,老虎吃肉);但睡覺的行為是一致的。 請通過繼承實(shí)現(xiàn)以上需求,并編寫測試類AnimalTest進(jìn)行測試。,17,18,為什么需要多態(tài) 5-1,在教師類的基礎(chǔ)上,開發(fā)一個類代表總部,負(fù)責(zé)對各教師進(jìn)行評估,評估內(nèi)容包括: 1、教師的自我介紹 2、教師的授課,19,為什么需要多態(tài) 5-2,public class HQ1 public void judge
12、(JavaTeacher2 t) roduction(); t.giveLesson(); public void judge(DotNetTeacher2 t) roduction(); t.giveLesson(); public static void main(String args) HQ1 hq = new HQ1(); hq.judge(new AccpJavaTeacher2(李明,北京中心“); hq.judge(new AccpDotNetTeacher2(張明,天津中心“); ,第一種解決方案,大家好!我是北京中心的李明. 啟動 Eclipse 知識點(diǎn)
13、講解 總結(jié)提問 大家好!我是天津中心的張明. 啟動 Visual Studio 2005 知識點(diǎn)講解 總結(jié)提問,控制臺輸出,20,為什么需要多態(tài) 5-3,現(xiàn)在,改進(jìn)教師類,增加一種新類型:DBTeacher,該類型的教師專門負(fù)責(zé)教授數(shù)據(jù)庫,要求如下: 屬性:姓名、所屬中心 方法:授課(啟動Sql Server、實(shí)施理論課授課)、自我介紹 同時,總部也負(fù)責(zé)對這類教師進(jìn)行評估,21,為什么需要多態(tài) 5-4,如果在第一種解決方案的基礎(chǔ)上去解決,我們需要如下兩個步驟: 建立DBTeacher類 修改總部類,增加方法:judge(DBTeacher t),每增加一種新的教師類型,都要修改總部類,增加相應(yīng)
14、的judge(評估)方法,代碼的可擴(kuò)展性及可維護(hù)性極差,能找到這個解決方案的弊端嗎?,22,為什么需要多態(tài) 5-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(new AccpJavaTeacher2(李明,北京中心“); hq.judge(new AccpDotNetTeacher2(張明,天津中心); hq.judge(n
15、ew AccpDBTeacher(“李嵐,北京中心“); ,可以接收子類類型,根據(jù)實(shí)際創(chuàng)建的對象類型調(diào)用相應(yīng)方法,大家好!我是軟件教研室的李明. 啟動 Eclipse 知識點(diǎn)講解 總結(jié)提問 大家好!我是軟件教研室的張明. 啟動 Visual Studio 2005 知識點(diǎn)講解 總結(jié)提問 大家好!我是軟件教研室的李嵐. 啟動 Sql Server 知識點(diǎn)講解 總結(jié)提問,控制臺輸出,使用多態(tài)之后,當(dāng)需要增加新的子類類型時,無需更改總部類,程序的可擴(kuò)展性及可維護(hù)性增強(qiáng),23,簡單來說,多態(tài)是具有表現(xiàn)多種形態(tài)的能力的特征 同一個實(shí)現(xiàn)接口,使用不同的實(shí)例而執(zhí)行不同操作,什么是多態(tài),打印效果:彩色,打印效
16、果:黑白,打印,打印,24,如何實(shí)現(xiàn)多態(tài),1、子類重寫父類的方法 2、編寫方法時,使用父類定義的方法 3、運(yùn)行時,根據(jù)實(shí)際創(chuàng)建的對象類型動態(tài)決定使用哪個方法,public class Teacher public void giveLesson() System.out.println(知識點(diǎn)講解); System.out.println(總結(jié)提問); ,25,小結(jié) 2,請編碼實(shí)現(xiàn)如下需求: 樂器(Instrument)分為:鋼琴(Piano)、小提琴(Violin) 各種樂器的彈奏( play )方法各不相同。 編寫一個測試類InstrumentTest,要求: 編寫方法testPlay,對
17、各種樂器進(jìn)行彈奏測試。要依據(jù)樂器的不同,進(jìn)行相應(yīng)的彈奏。 在main方法中進(jìn)行測試,26,總結(jié) 2-1,class Base 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); name=Child2; ,給定如下Java代碼,編譯運(yùn)行后,輸出結(jié)果是什么?,public
18、class Sample public static void main(String args) Child c = new Child(); c.method(); ,Child2,控制臺輸出,1,2,3,27,總結(jié) 2-2,給定如下Java代碼,編譯運(yùn)行后,輸出結(jié)果是什么?,public class Teacher public void giveLesson() System.out.println(知識點(diǎn)講解); ,public class DBTeacher extends Teacher public void giveLesson() System.out.println(啟動
19、 SqlServer); ,1,2,public class Test public static void main(String args) Teacher t = new DBTeacher (); t.giveLesson(); ,控制臺輸出,啟動 SqlServer,28,生活中的方法重載,類,方法,方法參數(shù),方法實(shí)現(xiàn),司機(jī),轎車,巴士,火車,駕駛,啟動、行駛、,等待乘客上車、啟動、 行駛、到站停車、,正點(diǎn)發(fā)車、行駛、 到站停車、,如果用代碼實(shí)現(xiàn),我們需要三個方法,這些方法的方法名稱相同,參數(shù)類型不同,29,方法重載的代碼示例 1,方法重載并不陌生 java.io.PrintStre
20、am類的println方法能夠打印數(shù)據(jù)并換行,根據(jù)數(shù)據(jù)類型的不同,有多種實(shí)現(xiàn)方式,public class Test public static void main(String args) int i = 0; char c = z; String str = hello; System.out.println(i); System.out.println(c); System.out.println(str); ,方法名相同,參數(shù)類型不同,調(diào)用不同的println方法,方法重載,30,方法重載的代碼示例 2,java.lang.Math類的max()方法能夠從兩個數(shù)字中取出最大值,它有多種
21、實(shí)現(xiàn)方式 運(yùn)行時,Java虛擬機(jī)先判斷給定參數(shù)的類型,然后決定到底執(zhí)行哪個max()方法,public class Test public static void main(String args) Math.max(1,2); Math.max(1.0F,2.F); Math.max(1.0,2); ,方法重載,31,構(gòu)造方法重載 2-1,構(gòu)造方法重載是方法重載的典型示例,public class Teacher7 private String name; / 教師姓名 private String department = “軟件教研室”; / 所在教研室 Public Teacher7(
22、String name) = name; /設(shè)定教師姓名 public Teacher7(String name, String department) = name; /設(shè)定教師姓名 this.department = department; /設(shè)定教師教研室 public String introduction() return 大家好!我是 + department + 的 + name ; ,構(gòu)造方法重載,32,構(gòu)造方法重載 2-2,通過調(diào)用不同的構(gòu)造方法來表達(dá)對象的多種初始化行為 例如: 默認(rèn)情況下,教師來自北京中心,初始化時,只需提供教師姓名
23、 有時,需要提供所在中心名稱及教師姓名,public class AccpTeacher7Test public static void main(String args) Teacher7 teacher1 = new Teacher7(李芳); System.out.println(roduction(); Teacher7 teacher2 = new Teacher7(張欣, “網(wǎng)絡(luò)教研室); System.out.println(roduction(); ,大家好!我是軟件教研室的李芳 大家好!我是網(wǎng)絡(luò)教研室的張欣,33,方法的重寫和重
24、載總結(jié),34,方法的重載(overload),在同一個類中,一個以上的方法名稱相同,參數(shù)列表不同,這種定義方法叫做方法的重載。,35,36,例如:,public int summn(int m,int n) return m+n; public int summn(int m,int n,int k) return m+n+k; ,37,例如:,public int summn(int m,int n) return m+n; public int summn(int x,int y) return x+y; /是重載嗎?,不是,38,方法的重寫 在子類中,聲明和父類中完全相同(方法名字、參數(shù)
25、類型、個數(shù)和順序)的方法,叫做方法的重寫。 方法的重載和方法的重寫,都是實(shí)現(xiàn)類的多態(tài)性的重要途徑。 重寫隱藏了父類中的同名成員。如果子類中成員 m 是重寫的,則在子類中訪問 m 時,訪問的是子類中的,而不是父類中的 m。,39,訪問被重寫的方法:,有時,需要在子類中訪問父類中被重寫的方法,可使用 super 關(guān)鍵字來實(shí)現(xiàn)。 super 代表當(dāng)前類的直接父類。,40,public class Fclass public int sum(int m,int n) return m+n; ,public class Sclass extends Fclass public int sum(int m
26、,int n) int x; x=super.sum(m,n); return x+x; ,方法重寫示例:,41,總結(jié),給定如下Java代碼,請指出代碼中的錯誤,并解釋原因。,public class Sample private int x; public Sample() x = 1; public Sample(int i) x = i; public int Sample(int i) x = i; return x+; private Sample(int i, String s) public Sample(String s,int i) private Sampla(int i) x
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025財達(dá)證券股份有限公司資產(chǎn)管理業(yè)務(wù)委員會招聘2人備考題庫及完整答案詳解一套
- 2025成都易付安科技有限公司第一批次招聘15人備考題庫及一套參考答案詳解
- 銷售生產(chǎn)財務(wù)管理制度
- 生產(chǎn)中園區(qū)管理制度
- 2026云南昆明市盤龍區(qū)新迎第二小學(xué)招聘3人備考題庫及1套參考答案詳解
- 2026云南怒江州教育體育系統(tǒng)引進(jìn)緊缺學(xué)科教師16人備考題庫及答案詳解一套
- 2025年秋季泉州市豐澤區(qū)云山實(shí)驗(yàn)小學(xué)語文頂崗教師招聘備考題庫帶答案詳解
- 2025廣東女子職業(yè)技術(shù)學(xué)院第三批招聘9人備考題庫及一套答案詳解
- 2026江西南昌南車輛救援大隊招聘勞務(wù)派遣高速工作人員備考題庫及完整答案詳解
- 2026上半年杭州市衛(wèi)生健康委員會所屬十八家事業(yè)單位招聘高層次人才514人備考題庫(含答案詳解)
- 2025年高中語文必修上冊《登泰山記》文言文對比閱讀訓(xùn)練(含答案)
- 2025年金蝶AI蒼穹平臺新一代企業(yè)級AI平臺報告-
- 2025中國機(jī)械工業(yè)集團(tuán)有限公司(國機(jī)集團(tuán))社會招聘19人筆試參考題庫附答案
- 淺析煤礦巷道快速掘進(jìn)技術(shù)
- 成人留置導(dǎo)尿標(biāo)準(zhǔn)化護(hù)理與并發(fā)癥防控指南
- 2025年勞動關(guān)系協(xié)調(diào)師綜合評審試卷及答案
- CIM城市信息模型技術(shù)創(chuàng)新中心建設(shè)實(shí)施方案
- 班級互動小游戲-課件共30張課件-小學(xué)生主題班會版
- 2025至2030全球及中國智慧機(jī)場建設(shè)行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025年二級造價師《土建工程實(shí)務(wù)》真題卷(附解析)
- 智慧農(nóng)業(yè)管理中的信息安全對策
評論
0/150
提交評論