第3章+C#面向?qū)ο缶幊?4(課件)-《算法與程序設(shè)計(jì)-C#》同步教學(xué)(清華大學(xué)版)_第1頁(yè)
第3章+C#面向?qū)ο缶幊?4(課件)-《算法與程序設(shè)計(jì)-C#》同步教學(xué)(清華大學(xué)版)_第2頁(yè)
第3章+C#面向?qū)ο缶幊?4(課件)-《算法與程序設(shè)計(jì)-C#》同步教學(xué)(清華大學(xué)版)_第3頁(yè)
第3章+C#面向?qū)ο缶幊?4(課件)-《算法與程序設(shè)計(jì)-C#》同步教學(xué)(清華大學(xué)版)_第4頁(yè)
第3章+C#面向?qū)ο缶幊?4(課件)-《算法與程序設(shè)計(jì)-C#》同步教學(xué)(清華大學(xué)版)_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C#程序設(shè)計(jì)

第3章C#面向?qū)ο缶幊?派生類和基類的轉(zhuǎn)換可以將一個(gè)派生類型直接賦值給一個(gè)基類型通過(guò)該基類型可以訪問(wèn)父類,子類非私有成員Managermng=newManager("王軍",45,4000,3758.26);Employeeemp=mng;emp.Display();emp.Bonus=908;//編譯錯(cuò)誤執(zhí)行的是子類的Display()方法3基本內(nèi)容方法的隱藏密封類和密封方法嵌套類方法的重寫(xiě)抽象類和抽象方法分部類4方法的隱藏Personper=newPerson("person",50);per.GetInfo();Studentstu=newStudent("student",20,"201209");stu.GetInfo();name:personage:50studentID:201209繼承是子類使用父類的方法輸出:學(xué)生的學(xué)號(hào)。隱藏5方法的隱藏如何隱藏父類的方法?使用關(guān)鍵字new來(lái)覆蓋方法(隱藏方法)不加new關(guān)鍵字,也認(rèn)為是方法隱藏,但編譯會(huì)產(chǎn)生警告類或結(jié)構(gòu)中的常量、字段、屬性、方法隱藏基類中的同名成員不可以與override同用使用new隱藏父類方法時(shí)s=singer;s.Introduce();我是一個(gè)明星如何使得父類變量被賦值為子類實(shí)例時(shí),調(diào)用的是子類的方法?6基本內(nèi)容方法的隱藏密封類和密封方法嵌套類方法的重寫(xiě)抽象類和抽象方法分部類7什么是多態(tài)同樣一件行為(吃飯),但表現(xiàn)的形式卻是不同的,這就是生活中的多態(tài)。這種不同類型的對(duì)象對(duì)于同一方法表現(xiàn)出了不同的行為的方式就是多態(tài)。分析

吃飯用刀叉用筷子用手抓繼承是子類使用父類的方法,而多態(tài)則是父類使用子類的方法。8虛方法和方法重寫(xiě)重寫(xiě)方法在基類中使用關(guān)鍵字virtual定義虛方法派生類中使用關(guān)鍵字override來(lái)重寫(xiě)方法可用于方法、屬性、索引器、事件不能和static、abstract、override、private同用9關(guān)于重寫(xiě)如果一個(gè)基類的方法聲明為虛函數(shù),任何繼承該虛函數(shù)的子類可以聲明override方法重寫(xiě)它子類重寫(xiě)的方法必須和父類的虛函數(shù)有相同的簽名override不能改變基類虛函數(shù)的訪問(wèn)權(quán)限override不能和static、virtual、new同用被重寫(xiě)的方法必須是virtual或abstract或overrideoverride用于擴(kuò)展或修改繼承的且聲明為abstract或virtual的方法、屬性、索引器、事件publicoverridevoidDisplay(){base.Display();Console.WriteLine("津貼是:{0}",this.Bonus);}可以通過(guò)base調(diào)用繼承的基類的虛函數(shù)10重寫(xiě)和隱藏的區(qū)別同一個(gè)子類對(duì)象實(shí)例隱藏重寫(xiě)字段可以使用new隱藏,但不能設(shè)置為virtual子類特有的成員不能通過(guò)父類來(lái)引用通過(guò)子類引用執(zhí)行的是子類的版本通過(guò)父類引用執(zhí)行的也是父類的版本通過(guò)子類引用執(zhí)行的是子類的版本通過(guò)父類引用執(zhí)行的也是子類的版本11隱藏方法12基本內(nèi)容方法的隱藏密封類和密封方法嵌套類方法的重寫(xiě)抽象類和抽象方法分部類13抽象方法的概念當(dāng)創(chuàng)建一個(gè)類時(shí),有時(shí)需要讓該類包含一些特殊的方法,該類對(duì)這些方法不提供實(shí)現(xiàn),但是該類的派生類必須實(shí)現(xiàn)這些方法,這些方法稱為抽象方法。跟虛方法有什么區(qū)別?虛方法: 子類可以不實(shí)現(xiàn)抽象方法: 子類必須實(shí)現(xiàn)14抽象方法的特點(diǎn)抽象方法必須定義在抽象類中抽象類中可以出現(xiàn)方法的具體實(shí)現(xiàn)或virtual方法抽象類不能直接通過(guò)new實(shí)例化,必須通過(guò)繼承自抽象類的子類來(lái)實(shí)例化你知道什么是“東西”嗎?小王:“你要讓我?guī)湍隳媚莻€(gè)水杯嗎?”

“麻煩你,小王。幫我把那個(gè)東西拿過(guò)來(lái)好嗎”

“你看你的房間亂成什么樣子了,以后不要把東西亂放了,知道么?”

15抽象類的定義及使用演示示例:抽象類父類類型對(duì)象名=new子類構(gòu)造方法();對(duì)象名.重寫(xiě)方法();這個(gè)對(duì)象實(shí)際是子類的對(duì)象父類可以代表所有的子類對(duì)象。[修飾符]

abstract

class

類名{

類體}可以修飾類、方法、屬性、事件、索引器,不能修飾字段定義使用16抽象方法的定義及實(shí)現(xiàn)演示示例:抽象類[修飾符]

override

返回值類型方法名(形參列表);{方法體}[修飾符]

abstract

返回值類型方法名(形參列表);父類子類方法體只由一個(gè)分號(hào)組成17總結(jié)抽象方法的優(yōu)點(diǎn)?什么是抽象方法的重寫(xiě)?什么時(shí)候使用抽象方法?基類無(wú)需對(duì)抽象方法提供實(shí)現(xiàn),但是基類的派生類必須為基類中的抽象方法提供實(shí)現(xiàn)。當(dāng)派生類從抽象類中繼承一個(gè)抽象方法時(shí),派生類必須重寫(xiě)該抽象方法。這個(gè)規(guī)則在編譯時(shí)強(qiáng)制實(shí)施。如果有一個(gè)方法對(duì)所有的子類來(lái)說(shuō)是公共的,并且強(qiáng)制要求所有派生類都必須實(shí)現(xiàn)這個(gè)方法。18提高當(dāng)抽象類從基類繼承虛方法時(shí),抽象類可以使用抽象方法重寫(xiě)該虛方法

classA{publicvirtualvoidF(){Console.WriteLine("F");}}abstractclassB:A{publicabstractoverridevoidF();}

classC:B{publicoverridevoidF(){Console.WriteLine("C");}}Aa=newC();a.F();輸出:C沒(méi)有override輸出:F19總結(jié)抽象類抽象類______直接實(shí)例化,可以定義抽象類型的變量,但其值必須為null,或者是其派生的非抽象類的實(shí)例的引用抽象類_____被密封當(dāng)從抽象類派生非抽象類時(shí),這些非抽象類必須實(shí)現(xiàn)所繼承的所有抽象成員,從而重寫(xiě)那些抽象成員不能不能不能將static成員聲明為abstract20多態(tài)-注意使用父類類型的引用指向子類的對(duì)象;該引用只能調(diào)用父類中定義的方法和變量;如果子類中重寫(xiě)了父類中的一個(gè)方法,那么在調(diào)用這個(gè)方法的時(shí)候,將會(huì)調(diào)用子類中的這個(gè)方法多態(tài)性是一個(gè)面向?qū)ο蟮母拍睿试S以相似的方式來(lái)對(duì)待所有派生類,盡管這些派生類是各不相同的。創(chuàng)建派生類的目的是為了獲得更多的特殊功能。允許同一種功能,有多種實(shí)現(xiàn)21基本內(nèi)容方法的隱藏密封類和密封方法嵌套類方法的重寫(xiě)抽象類和抽象方法分部類22密封類和密封方法將關(guān)鍵字sealed置于關(guān)鍵字class的前面,可以將類聲明為密封類表示不能繼承該類,即密封類不能用作基類不能是抽象類密封類主要用于防止非有意的派生。由于密封類從不用作基類,所以調(diào)用密封類成員的效率可能會(huì)更高些結(jié)構(gòu)隱含是sealed,所以不能被繼承.Net基類庫(kù)中的string類就是一個(gè)密封類23密封方法當(dāng)實(shí)例方法聲明包含sealed修飾符時(shí),稱該方法為密封方法如果實(shí)例方法聲明包含sealed修飾符,則它必須也包含override修飾符。使用sealed修飾符可以防止派生類進(jìn)一步重寫(xiě)該方法sealed可以用于修飾類、方法、屬性24基本內(nèi)容方法的隱藏密封類和密封方法嵌套類方法的重寫(xiě)抽象類和抽象方法分部類25嵌套類的聲明類內(nèi)聲明的類稱為內(nèi)部類(innerclass)或者嵌套類(nestedclass)classContainer{

}publicclassNested{publicvoidSayHello(){Console.WriteLine("Hello,Iamanestedclass!");}}private(默認(rèn))、protected、internal、protectedinternal如何訪問(wèn)內(nèi)部類?26嵌套類的聲明classContainer{

publicclassNested{publicvoidSayHello(){ …}}}classnestTest{staticvoidMain(string[]args){nest.SayHello();}}完全限定名

Container.NestedContainer.Nestednest=newContainer.Nested();在外部類之外創(chuàng)建內(nèi)部類的實(shí)例時(shí),需要使用“外部類.內(nèi)部類”的完全限定名。不需要首先創(chuàng)建外部類的實(shí)例在外部能否創(chuàng)建內(nèi)部類對(duì)象,還取決于他的可訪問(wèn)性27嵌套類的訪問(wèn)內(nèi)部類可以訪問(wèn)外部類的所有成員,包括該類具有的protected、private成員通過(guò)外部類的對(duì)象訪問(wèn)this只能引用內(nèi)部類自己的成員28基本內(nèi)容方法的隱藏密封類和密封方法嵌

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論