資源描述:
《第04章 面向?qū)ο蟮母呒?jí)編程ppt課件.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第4章面向?qū)ο蟮母呒?jí)編程4.1封裝、繼承與多態(tài)4.2版本控制4.3接口4.4委托4.5泛型處理本章教學(xué)目的介紹面向?qū)ο蟾呒?jí)編程的相關(guān)知識(shí),使學(xué)生對(duì)C#高級(jí)編程有一個(gè)初步的感性認(rèn)識(shí)。本章教學(xué)要求(1)掌握繼承、重寫(xiě)、接口、泛型的概念及基本用法;(2)掌握與實(shí)驗(yàn)有關(guān)的相關(guān)內(nèi)容。(3)了解其他內(nèi)容。4.1封裝、繼承與多態(tài)封裝:隱藏外部調(diào)用者不需要了解的類(lèi)內(nèi)部的信息。繼承:指一個(gè)類(lèi)(擴(kuò)充類(lèi))通過(guò)某種簡(jiǎn)單表示形式使其自動(dòng)擁有另一個(gè)類(lèi)(基類(lèi))的各種屬性和方法,并能進(jìn)行擴(kuò)充。多態(tài):通過(guò)類(lèi)的繼承使擴(kuò)充類(lèi)與基類(lèi)中名稱(chēng)相同的方法具有不同的功能。4.1.1封裝模塊信息通過(guò)類(lèi)封裝類(lèi)的
2、成員通過(guò)字段、屬性、方法、事件封裝私有的用private可以被繼承的用protected公共成員用public不要為了方便把什么都定義成public不要為了方便把什么都定義成static通過(guò)屬性進(jìn)行封裝的例子:P73例4-14.1.2繼承兩種實(shí)現(xiàn)繼承的方式:類(lèi)繼承和接口繼承。類(lèi)繼承只允許單一繼承,接口可實(shí)現(xiàn)多重繼承。被繼承的類(lèi)叫基類(lèi)(父類(lèi))。繼承自其他類(lèi)的類(lèi)叫擴(kuò)充類(lèi)(子類(lèi))。4.1.2繼承聲明擴(kuò)充類(lèi)的語(yǔ)法:[訪問(wèn)修飾符]class擴(kuò)充類(lèi)名稱(chēng):基類(lèi)名稱(chēng){//程序代碼}2.?dāng)U充類(lèi)繼承了所有定義在基類(lèi)中數(shù)據(jù)的定義和方法。3.執(zhí)行時(shí),先執(zhí)行基類(lèi)的構(gòu)造函數(shù),然后依次執(zhí)行擴(kuò)充
3、類(lèi)的構(gòu)造函數(shù)。4.繼承的例子(1):P76例4-2。5.如果不想讓某個(gè)類(lèi)被繼承,可以使用sealed修飾符。4.1.2繼承中構(gòu)造函數(shù)的特殊寫(xiě)法思考:下面的程序能否通過(guò)編譯?usingSystem;classA{privateintage;publicA(intage){this.age=age;}}classB:A{privateintage;publicB(intage){this.age=age;}}classProgram{staticvoidMain(string[]args){Bb=newB(10);}}4.1.2繼承中構(gòu)造函數(shù)的特殊寫(xiě)法usingSys
4、tem;classA{privateintage;publicA(){}publicA(intage){this.age=age;}}classB:A{privateintage;publicB():base(){}publicB(intage):base(age){this.age=age;}}classProgram{staticvoidMain(string[]args){Bb=newB(10);}}其含義為:將B類(lèi)的構(gòu)造函數(shù)的參數(shù)age傳遞給A類(lèi)的構(gòu)造函數(shù)。程序執(zhí)行時(shí),將首先調(diào)用A類(lèi)中帶參數(shù)的構(gòu)造函數(shù),由于B的構(gòu)造函數(shù)中已經(jīng)將age傳遞給A,所以A的構(gòu)造函
5、數(shù)就可以利用這個(gè)傳遞的參數(shù)進(jìn)行初始化。(C#的base在Java中是用super關(guān)鍵字實(shí)現(xiàn)的。)4.1.3多態(tài)用相同的操作名在一個(gè)類(lèi)層次的不同類(lèi)中實(shí)現(xiàn)不同的功能,相同的消息由同一(父)類(lèi)的不同對(duì)象接收時(shí),導(dǎo)致不同的行為。Shape類(lèi)Draw()Rectangle類(lèi)Draw()Circle類(lèi)Draw()Triangle類(lèi)Draw()1、虛方法如果想讓某個(gè)方法或者屬性被擴(kuò)充類(lèi)重寫(xiě),在基類(lèi)中用virtual:publicvirtualvoidmyMethod(){……//程序代碼}擴(kuò)充類(lèi)則用override修飾符表示重寫(xiě):publicoverridevoidmyMeth
6、od(){……//程序代碼}注意:對(duì)于擴(kuò)充類(lèi),如果仍想讓其方法或者屬性被該類(lèi)的擴(kuò)充類(lèi)重寫(xiě),則該類(lèi)可以用virtual或者override,該類(lèi)的擴(kuò)充類(lèi)則用override。4.1.3多態(tài)classA{publicA(){Console.WriteLine("a");}publicvirtualvoidHello(){Console.WriteLine("HA");}publicvoidM(){Console.WriteLine("M");}}classB:A{publicB(){Console.WriteLine("b");}publicoverridevoidH
7、ello(){Console.WriteLine("HB");}}classC:B{publicC(){Console.WriteLine("c");}publicoverridevoidHello(){Console.WriteLine("HC");}}classProgram{staticvoidMain(){Bb=newC();b.Hello();b.M();}}寫(xiě)出輸出結(jié)果。4.1.3多態(tài)abcHCM4.1.3多態(tài)使用虛擬方法和重寫(xiě)方法時(shí),要注意:(1)虛擬方法不能聲明為靜態(tài)的。(2)Virtual、override不能和private一起使用。(3)重寫(xiě)
8、方法或?qū)傩?/p>