資源描述:
《使用C#進(jìn)行面向?qū)ο缶幊?第八章 繼承和多態(tài).ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第八章繼承和多態(tài)1本章內(nèi)容繼承引用變量類型和所指對(duì)象類型不一致的情況多態(tài)抽象類和抽象方法28.1繼承在C#編程語言中,通過繼承可利用已有的類,并擴(kuò)展它的屬性和方法。這個(gè)已有的類可以是.net類庫中的類的或其他程序員編寫的。通過繼承,能夠復(fù)用原有代碼。3什么是繼承如何定義繼承子類對(duì)象的創(chuàng)建過程父類的private成員的繼承問題靜態(tài)成員的繼承問題成員變量的隱藏方法的隱藏base關(guān)鍵字有關(guān)繼承的知識(shí)點(diǎn)4考慮如下問題:定義動(dòng)物,人,魚這三個(gè)類存在幾個(gè)問題:(1)沒有描述這幾個(gè)類之間的關(guān)系。(2)定義其他類(如貓,狗)時(shí),除了定義該類的特殊屬性和行為外,還需要定義動(dòng)物的一般屬性和行為。
2、(3)如果動(dòng)物的一般屬性和行為需要修改,則跟該類有關(guān)的所有類的定義都需要修改。動(dòng)物的屬性動(dòng)物的行為動(dòng)物的屬性動(dòng)物的行為人的特殊屬性人的特殊行為動(dòng)物的屬性動(dòng)物的行為魚的特殊屬性魚的特殊行為動(dòng)物人魚(1)什么是繼承5為解決這個(gè)問題,引入類的繼承這個(gè)概念。我們使得人類和魚類繼承動(dòng)物類。動(dòng)物的屬性動(dòng)物的行為自動(dòng)具有動(dòng)物類的屬性和行為人的特殊屬性人的特殊行為自動(dòng)具有動(dòng)物類的屬性和行為魚的特殊屬性魚的特殊行為動(dòng)物(基類/父類/超類)人(派生類/子類)魚(派生類/子類)繼承繼承6基類和派生類的概念是相對(duì)的,一個(gè)類既可以是基類,也可以是派生類。汽車小轎車卡車客車?yán)^承繼承繼承輪船交通工具繼承繼
3、承7繼承的語法形式:class子類的名稱:父類名稱{子類特有的成員變量和成員函數(shù)}(2)如何定義繼承classHuman:Living{publicvoidsay(){System.Console.Write("hello!");}}classAnimal{publicintage;publicvoidshout(){}}8分析一所大學(xué)中的人的類層次結(jié)構(gòu)學(xué)生本科生研究生教師繼承繼承繼承教職員工人繼承繼承職工繼承9C#中所有的類(包括我們自己定義的類)都是直接或間接繼承自System.Object類。10注意:(1)子類繼承所有的父類成員(2)子類中能夠直接訪問繼承自父類的pu
4、blic、protected成員(3)子類中不能夠直接訪問繼承自父類的private成員11繼承的威力你已經(jīng)實(shí)現(xiàn)了一個(gè)基本的計(jì)算器程序.現(xiàn)在如果要你實(shí)現(xiàn)一個(gè)類似windows自帶計(jì)算器那樣既有標(biāo)準(zhǔn)版功能又有科學(xué)版功能的計(jì)算器,你該怎么辦?12(3)子類對(duì)象的創(chuàng)建過程子類對(duì)象可看作內(nèi)部包含著一個(gè)父類的對(duì)象子類對(duì)象的創(chuàng)建過程(1)按照定義順序初始化子類對(duì)象新定義的成員變量(2)創(chuàng)建子類對(duì)象中包含的父類對(duì)象(3)調(diào)用子類的構(gòu)造函數(shù)classX{}classY:X{publicintdata;}X類對(duì)象Y類對(duì)象data13習(xí)題:下列程序的輸出結(jié)果是什么?classA{publicA(
5、){System.Console.WriteLine("A()");}}classB{publicB(){System.Console.WriteLine("B()");}}classPoint{publicPoint(){System.Console.WriteLine("Point()");}}classMapPoint:Point{publicMapPoint(){System.Console.WriteLine("MapPoint()");}}classColorPoint:MapPoint{publicAa=newA();publicBb;publicColorPo
6、int(){System.Console.WriteLine("ColorPoint()");}publicstaticvoidMain(){newColorPoint();}}PointMapPointColorPoint14子類中不能直接訪問繼承自父類的private成員,下列程序編譯出錯(cuò)publicclassA{privateintage=10;}publicclassB:A{publicvoidfun(){age=20;}}ageA類的對(duì)象ageTest類的對(duì)象繼承自A類(4)父類的private成員的繼承問題15在子類中如何訪問繼承自父類的private成員?可以通
7、過繼承自父類的public或protected成員來訪問繼承自父類的private成員publicclassA{privateintage=10;publicintGetAge(){returnage;}}publicclassB:A{publicvoidFun(){Console.WriteLine(GetAge());}}publicclassTest{publicstaticvoidMain(string[]args){Bb1=newB();b1.Fun();}}16某類的靜態(tài)成員為該類及該類的所