




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第五講 面向?qū)ο缶幊?二)繼承、封裝和多態(tài)14.3 繼承、封裝和多態(tài)4.3.1 繼承4.3.2 封裝4.3.3 多態(tài)4.3.4 this和base關(guān)鍵字24.3.1 類的繼承 繼承的意思是一個(gè)類可以建立在另一個(gè)類的基礎(chǔ)上,可以繼承另一個(gè)類的屬性和方法。我們把被繼承的類叫做基類,通過(guò)繼承產(chǎn)生的類叫做派生類(也可以叫做父類和子類)。繼承的概念來(lái)源與現(xiàn)實(shí)的生活,比如汽車、輪船、火車飛機(jī)等就是繼承于交通工具這個(gè)類,而汽車類中又可以派生出新的類,比如轎車、面包車等等。 引入繼承可以讓我們重用以前寫(xiě)過(guò)的代碼,新編寫(xiě)的代碼可以在原來(lái)的基礎(chǔ)上繼承而來(lái)。 在C#中繼承的方式就是定義派生類。 在C#中,所有的類都
2、是通過(guò)直接或間接地繼承Object類得到的。31. 派生子類定義派生類的基本形式:class 派生類名字:基類名字 派生類的代碼;public class Parent public Parent( ) .定義一個(gè)構(gòu)造函數(shù) public void WriteItem( ) .定義方法 public class Child:Parent public Child( ) . 派生類的構(gòu)造函數(shù) public static void Main( ) Child a=new Child( ); a.WriteItem( ); 派生類使用基類的方法基類的構(gòu)造函數(shù)先執(zhí)行再執(zhí)行派生類的構(gòu)造函數(shù)。42. 域的繼
3、承、添加與隱藏1、域的繼承:子類可以繼承父類的所有成員。2、域的添加:在子類定義中加上新的域變量,就可以使得子類具有比父類多的屬性。如: class Student: Person string school; int score; 子類比父類多了兩個(gè)成員: school、score。3、域的隱藏:子類重新定義一個(gè)從父類中繼承的域變量。 class A public int a; class B:A new public int a;使用new修飾符來(lái)隱藏父類的同名成員a。53. 方法的繼承、添加與覆蓋1、方法的繼承:子類可以繼承父類的所有方法。2、方法的添加:在子類定義中加上新的方法,以針對(duì)
4、子類實(shí)現(xiàn)相應(yīng)的功能。比如可以在Student類中定義分?jǐn)?shù)的判斷方法。 3、方法的覆蓋:子類定義與父類同名的方法。(多態(tài)之一) (1)定義同名但參數(shù)列表不同的方法,稱為方法的重載; (2)定義同名且參數(shù)列表也相同的方法,稱為新增,這時(shí)應(yīng) 該在同名方法前面用new修飾符; (3)定義同名且參數(shù)列表也相同的方法,并且父類中的方法用abstract/virtual進(jìn)行修飾,子類中的方法用override進(jìn)行了修飾,稱為虛方法的覆蓋。6方法重載舉例class parent public int add( int x,int y ) return(x+y); class child:parent publ
5、ic int add(int x,int y ,int z) return(x+y+z); public static void Main( ) child c1=new child( ); c1.add(1,2,3); c1.add(4,5); 分別使用了自己和父類的方法。7方法隱藏舉例class parent public int add( int x,int y ) return(x+y); class child:parent new public int add(int x,int y) return(x+y+10); public static void Main( ) child
6、 c1=new child( ); c1.add(4,5); 使用了自己的方法。8虛方法覆蓋舉例Class one public void x( ) Console.WriteLine(“one_x”); public virtual void y( ) Console.WriteLine(“one_y”); Class two:one new public void x( )/隱藏父類中的同名方法 Console.WriteLine(“two_x”); public override void y( )/重寫(xiě)同名方法 Console.WriteLine(“two_y”);Class test
7、 public static void Main( ) two m2=new m2(); one m1=m2;/m1指向m2實(shí)例 m1.x(); m2.x(); m1.y( ); m2.y(); 結(jié)果:one_x two_x two_y two_y94.3.2 類的封裝 類的封裝改變了用戶傳統(tǒng)的使用數(shù)據(jù)和代碼的方式,它將方法和數(shù)據(jù)包含在一起構(gòu)成一個(gè)獨(dú)立的單元,可以通過(guò)設(shè)定單元內(nèi)各個(gè)成員的的特性來(lái)控制對(duì)成員的訪問(wèn)。比如將一個(gè)字段定義為private,就可以防止外界直接訪問(wèn)這個(gè)字段。封裝一個(gè)類由兩種做法:1)為一個(gè)私有類定義公共讀方法和寫(xiě)方法;2)使用屬性,用set和get訪問(wèn)器。10public
8、 class Student private string studentname; public string getstudentname( ) return(studentname);public string setstudentname(string na) studentname=na;class App public static void Main( ) Student s1=new Student( ); s1.setstudentname(“zhanghua”); Console.WriteLine(s1.getstudentname( ); 不能使用語(yǔ)句s1.studen
9、tname=“zhanghua”;114.3.3 多態(tài) 多態(tài)指的是定義具有不同功能但相同名稱的方法或?qū)傩缘亩鄠€(gè)類的能力。C#中的多態(tài)可以由虛方法實(shí)現(xiàn)。 對(duì)于非虛方法,其實(shí)現(xiàn)是不變的,無(wú)論由基類實(shí)例調(diào)用還是由派生類實(shí)例調(diào)用都是相同的;而虛方法的實(shí)現(xiàn)可以由派生類取代,取代的過(guò)程稱為重寫(xiě)。重寫(xiě)可以取代從基類繼承的虛方法,但原虛方法的可訪問(wèn)性不能改變,靜態(tài)方法和非虛方法不能被重寫(xiě)?;?public virtual void Show( ) . 派生類 public override void Show( ) . 12 虛方法重寫(xiě)舉例:定義基類圓形Round,有一個(gè)成員半徑,編寫(xiě)構(gòu)造函數(shù)和計(jì)算面積的虛
10、方法Area( );再定義一個(gè)派生類球形Sphere,對(duì)虛方法Area進(jìn)行重寫(xiě)。 class Round public double r; public Round(double r) this.r=r; public virtual double Area( ) return(3.14*r*r); class Sphere:Round public Sphere(double r):base(r) public override double Area( ) return(3.14*r*r*r); class App static void Main( ) Sphere s=new Sphe
11、re(2); Console.WriteLine(s.Area( ); 131. this關(guān)鍵字this關(guān)鍵字的作用是引用調(diào)用方法的當(dāng)前實(shí)例,它可以從構(gòu)造函數(shù)、實(shí)例方法和實(shí)例訪問(wèn)器中訪問(wèn)成員。用法一:使用this來(lái)訪問(wèn)域和方法void sayHello( ) Console.WriteLine(“My name is”+name);與以下方法相同void sayHello( ) Console.WriteLine(“My name is”+);用法二:解決局部變量與域同名問(wèn)題public Student(string name,string number)
12、=name; this.number=number;4.3.4 this和base關(guān)鍵字14this關(guān)鍵字舉例using System;public class Student public string name; public string number; public double subsidy=180; public Student(string name,string number) =name; this.number=number; public void ShowInfo( ) Console.WriteLine(“0n1”,name,number; Con
13、sole.WriteLine(“0”,AdvSubsidy.Caculate(this); public class AdvSubsidy public static double Caculate( student E) return(1.5*(E.subsidy); public class AppMain public static void Main( ) Student s1=new Student(“zhanghua”, “ 200454240”); s1.ShowInfo( ); 15this的注意事項(xiàng)this指的是調(diào)用的“對(duì)象”本身(1)通過(guò)this不僅可以引用該類中定義的域和
14、方法,還可以引用該類的父類中定義的域和方法;(2)在static靜態(tài)方法中,不能使用this關(guān)鍵字。162. base關(guān)鍵字:base指的是父類1) 明確指明父類的域和方法,例如,父類Person中有一個(gè)域?yàn)閍ge,則在子類Student中用age 、 this.age 、 base.age來(lái)訪問(wèn)age是完全一樣的。2) 當(dāng)子類的方法隱藏或覆蓋了父類的同名方法但又要調(diào)用父類的方法時(shí),使用base關(guān)鍵字。3) 想使用父類的構(gòu)造方法。構(gòu)造方法是不能繼承的,但子類可以在構(gòu)造方法中調(diào)用直接父類的構(gòu)造方法,如 Student(string name,int age,string school) :bas
15、e(name,age) this.school=school;17base(用法2)舉例using System;public class A public int a=10; public void m( ) a+; Console.WriteLine(a); class B:A new public int a=20; new public void m( ) a+; / base.m( ); Console.WriteLine(a); public static void Main( ) A x=new A( ); Console.WriteLine(x.a); /10 x.m( );
16、/11 B y=new B( ); Console.WriteLine(y.a); /20 y.m( ); /11 21 如此處直接使用base.m( );則最后的結(jié)果為12而不是21。184.4 運(yùn)算符重載4.4.1 運(yùn)算符重載基本概念4.4.2 單目運(yùn)算符重載4.4.3 雙目運(yùn)算符重載194.4.1 多態(tài)之二:運(yùn)算符的重載運(yùn)算符可以進(jìn)行基本數(shù)據(jù)類型之間的運(yùn)算,想把自己定義的類型進(jìn)行類似“”之類的運(yùn)算就要用到運(yùn)算符重載對(duì)于、運(yùn)算符完全可以提供對(duì)應(yīng)的方法來(lái)完成,比如Decimal x,y;X+=y; 可以寫(xiě)成 decimal.Add(x,y) x+=y;運(yùn)算符重載的一般形式是 public s
17、tatic 返回類型 operator 運(yùn)算符(參數(shù)表) 語(yǔ)句; 20using System;Class class1 public int x1,x2; public class1() x1=1; x2=2; public static int operator +(class1 c) c.x1=c.x1+10; c.x2=c.x2+5; Public void Show() Console.WriteLine(“0,1”,x1,x2);Class App public static void Main( ) class1 mc=new class1( ); mc.Show( ); mc+; mc.Show( ); 結(jié)果:x1=1,x2=2 x1=11,x2=74.4.2 單目運(yùn)算符重載 +21using System;Class class1 public int x1,x2; public class1() x1=1; x2=2; public static class1 o
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工作中的有效溝通與合作能力培養(yǎng)
- 工作中的時(shí)間管理藝術(shù)與實(shí)踐經(jīng)驗(yàn)分享
- 工作場(chǎng)所心理健康關(guān)懷
- 工業(yè)領(lǐng)域中的熱管理新材料探索
- 工程制造中的精確測(cè)量與數(shù)學(xué)計(jì)算
- 工作流程優(yōu)化中的設(shè)備管理關(guān)鍵點(diǎn)
- 工廠教育培訓(xùn)提升員工技能的新途徑
- 工程機(jī)械的遠(yuǎn)程監(jiān)控和故障診斷技術(shù)應(yīng)用
- 工廠電氣節(jié)能改造的案例分析
- 工程機(jī)械的保養(yǎng)與維修技巧
- 宏觀經(jīng)濟(jì)學(xué)全套課件(完整)
- JBT 14609-2023 農(nóng)林拖拉機(jī)和機(jī)械 交流發(fā)電機(jī) (正式版)
- 計(jì)算機(jī)基礎(chǔ)知識(shí)題庫(kù)1000道含完整答案(歷年真題)
- 府谷縣國(guó)能煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 初中物理-摩擦力課件-市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件
- 社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估 投標(biāo)方案(技術(shù)標(biāo))
- 常見(jiàn)土源性寄生蟲(chóng)
- 銷冠表彰活動(dòng)方案
- 打大錘的安全操作規(guī)程培訓(xùn)課件
- 《掃除道》讀書(shū)筆記
- 《全民終身教育》課件
評(píng)論
0/150
提交評(píng)論